我有一个类似于以下内容的vueJs组件:
export default {
name: 'componentname',
data () {
return {
items: []
}
},
mounted() {
this.getItems();
},
methods: {
getItems() {
this.$http.get('HTTP_API_ADDRESS').then(res => {
this.items = res.data;
})
}
}
}
我在我的模板中使用了一个v-for循环,用于在对我的API进行调用之后显示的items数组中的项目。
我有一个问题,数组中的对象包含一个布尔值,我试图通过单击在页面上更新该对象,但是该对象似乎不会在页面上更新,除非实例中明确定义了已更新。
示例,纯粹是示例-代码不合逻辑。
<ul>
<li v-for="item in items" @click="item.available = !item.available">{{ item.name }} | {{ item.available }}</li>
</ul>
其想法是,可用项将显示对还是错,具体取决于对项目的单击。
我相信这与未在安装中定义的对象的元素有关,但是我不确定如果它们在数组中该怎么做?
答案 0 :(得分:0)
您可以在对象变为反应性之前预先填充available
:
this.$http.get('HTTP_API_ADDRESS').then(res => {
const items = res.data;
for (const item of items) {
item.available = false;
}
// The array and its objects are made reactive on the next line
this.items = items;
})
或者,您以后可以使用$set
添加新属性:
@click="$set(item, 'available', !item.available)"
相关文档为https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats。
答案 1 :(得分:0)