【发布时间】:2020-05-07 12:12:54
【问题描述】:
我有一个 Vue 页面,它从外部 JSON 源收集信息,然后使用它来计算属性。
问题:此属性不是反应性的(= 当基础数据更改时不会重新计算)
<div id="app">
<div v-for="tag in filteredTags">{{tag}}</div>
</div>
<script>
new Vue({
el: "#app",
data: {
tags: {},
allTags: {},
},
computed: {
// provides an Array of tags which are selected
filteredTags() {
let t = Object.keys(this.allTags).filter(x => this.allTags[x])
console.log(t)
return t
}
},
mounted() {
// get source tags
fetch("tags.json")
.then(r => r.json())
.then(r => {
this.tags = r
console.log(JSON.stringify(this.tags))
// bootstrap a tags reference where all the tags are selected
Object.keys(this.tags).forEach(t => {
this.allTags[t] = true
});
console.log(JSON.stringify(this.allTags))
})
}
})
</script>
提取的文件({"tag1":["/posts/premier/"],"post":["/posts/premier/","/posts/second/"]})在mounted()中正确处理,控制台输出为
{"tag1":["/posts/premier/"],"post":["/posts/premier/","/posts/second/"]}
{"tag1":true,"post":true}
filteredTags 是空的。在控制台上,我看到它在页面处理开始时显示(如[]),最初很好(第一次计算,当allTags 为空时),但当@987654328 时不再计算@ 更改(在 tags.json 被提取、处理和 allTags 正确更新之后)。
为什么这不是反应式的?
【问题讨论】:
标签: vue.js