Vuejs:无法在计算的 属性 循环中访问(计算的)道具
Vuejs: Can't access (computed) props within computed property loop
也许很明显,但我有一个 Vue 单文件组件,如下所示:
<template>
...
</template>
<script>
export default {
props: [ 'matches', 'results' ],
computed: {
formattedMatches: function () {
let rows = [];
this.matches.forEach(function($match, $i) {
rows[$i] = {
id: $i + 1,
title: $match[0] + ' ' + $match[1]
};
});
return rows;
},
formattedResults: function () {
let rows = [];
this.results.forEach(function($resultRow, $i) {
rows[$i] = {
id: $i + 1,
title: this.formattedMatches[$i]
// Error in render: "TypeError: Cannot read property 'formattedMatches' of undefined"
};
});
return rows;
},
...
</script>
如果我尝试 this.matches
,错误也会出现,而不仅仅是 this.formattedMatches
。我想这是 类 和方法中的可变范围的问题,但我什至不知道是否有另一种更好的方法或模式来实现相同的行为。
有什么想法吗?提前致谢。
this
在forEach
的匿名函数中有不同的上下文。最简单的解决方法是使用箭头函数符号。
this.results.forEach(($resultRow, $i) => {
rows[$i] = {
id: $i + 1,
title: this.formattedMatches[$i]
};
});
在 Whosebug 上找到了基于 的解决方案。
正如它所说,“回调中的 this
指的是回调本身(或者更确切地说,正如所指出的,回调的执行上下文),而不是 Vue 实例。如果你想访问这个你要么需要将它分配给回调之外的东西”。
所以就我而言...
...
formattedResults: function () {
let self = this;
let rows = [];
this.results.forEach(function($resultRow, $i) {
rows[$i] = {
id: $i + 1,
title: self.formattedMatches[$i]
};
});
return rows;
},
...
... 成功了。
无论如何谢谢!
也许很明显,但我有一个 Vue 单文件组件,如下所示:
<template>
...
</template>
<script>
export default {
props: [ 'matches', 'results' ],
computed: {
formattedMatches: function () {
let rows = [];
this.matches.forEach(function($match, $i) {
rows[$i] = {
id: $i + 1,
title: $match[0] + ' ' + $match[1]
};
});
return rows;
},
formattedResults: function () {
let rows = [];
this.results.forEach(function($resultRow, $i) {
rows[$i] = {
id: $i + 1,
title: this.formattedMatches[$i]
// Error in render: "TypeError: Cannot read property 'formattedMatches' of undefined"
};
});
return rows;
},
...
</script>
如果我尝试 this.matches
,错误也会出现,而不仅仅是 this.formattedMatches
。我想这是 类 和方法中的可变范围的问题,但我什至不知道是否有另一种更好的方法或模式来实现相同的行为。
有什么想法吗?提前致谢。
this
在forEach
的匿名函数中有不同的上下文。最简单的解决方法是使用箭头函数符号。
this.results.forEach(($resultRow, $i) => {
rows[$i] = {
id: $i + 1,
title: this.formattedMatches[$i]
};
});
在 Whosebug 上找到了基于 this
指的是回调本身(或者更确切地说,正如所指出的,回调的执行上下文),而不是 Vue 实例。如果你想访问这个你要么需要将它分配给回调之外的东西”。
所以就我而言...
...
formattedResults: function () {
let self = this;
let rows = [];
this.results.forEach(function($resultRow, $i) {
rows[$i] = {
id: $i + 1,
title: self.formattedMatches[$i]
};
});
return rows;
},
...
... 成功了。 无论如何谢谢!