【发布时间】:2017-08-17 03:24:55
【问题描述】:
我正在尝试在数据中初始化一个空数组,然后从服务器获取 JSON 并填充它。
问题是数组总是有一个额外的 Observer 对象,所以当我记录它时,我会看到:
空项目数组:[ob: Observer]
这是一段代码摘录:
data() {
return {
items: []
}
},
created() {
this.$http.get('/api/menus').then(function (response) {
console.log('items before', this.items); //THIS LOGS items before: [__ob__: Observer]
this.items = [].concat(response.body);
this.items.forEach(function (item) {
console.log('item', item);
item.$add('active', false);
item.tests.forEach(function (test) {
test.$add('active', false);
});
});
}).catch(function (err) {
console.error('err', err);
});
},
问题是当尝试向数组中的对象添加新属性时出现错误:
err TypeError: item.$add 不是函数
当我调试时,我看到它发生是因为它将观察者对象视为数组的一部分。
正常吗?我应该只检查 $add 是否存在吗?那么在视图中渲染的时候,Vue会忽略这个对象吗?
【问题讨论】:
-
我认为这很正常,因为 VueJS 使用观察者进行反应性,所以数据对象中的每个项目都附加了观察者。检查这个但使用浏览器控制台,而不是使用 JsBin jsbin.com/qusugoyame/edit?html,js,console,output
-
是的,完全正确,但有什么问题?
-
$add 方法应该是什么?它不赞成使用 $set
-
这是工作示例 jsbin.com/qusugoyame/edit?html,js,console,output - 让我知道您是否正在寻找这个,以便我可以解释它并添加为答案
-
是的,使用箭头函数有时可以根据情况解决上下文问题。@GONG 提供了很好的答案,所以你可以接受它,不需要发布我的。
标签: javascript vue.js vuejs2