【发布时间】:2019-07-09 23:08:02
【问题描述】:
我希望我的视图使用作为道具传递的 id 在商店中查找对象的属性。存储中的对象异步显示,因此该对象可能不会立即出现。我希望视图对对象的最终外观做出反应。
<template>
<div>
<h1>{{ title }}</h1>
</div>
</template>
<script>
export default {
props: ['id'],
computed: {
widget () {
let path = `widget/${this.id}`
return this.$store.state.widgets[path]
},
title () {
let widget = this.widget
return (widget) ? widget.data().fullName : 'nothing to see here'
}
}
}
</script>
使用 vuex 调试工具,我可以看到商店小部件对象一开始是空的,然后设置为 widgets: { 'widgets/someId': { ... } },但我的 vue 似乎没有接受更改。标题仍然 == 'nothing...'。
我尝试制作这些方法,但我得到了相同的行为。我还尝试替换商店中的整个 widgets 对象,而不是一次替换一个道具(我认为这是一个要求),但仍然没有运气。
我认为我的问题与this one 非常相似,但那里的答案过于简洁。它只是说“使用数据项”,但我真的不知道那是什么或如何使用它(或者为什么这会使 vue 反应)。
【问题讨论】:
-
你能显示小部件的 vuex 存储代码吗?
-
你考虑过使用getters吗?它们的优点是仅根据商店变化进行重新评估。您可以使用公开其他吸气剂的第二个参数“链接”吸气剂。您可以根据各自计算的
widget评估title。 stackoverflow.com/a/53993174/5059657 -
是的,计算属性不是很被动。前段时间我遇到了同样的问题。我最终使用了
watchers:vuejs.org/v2/guide/computed.html#Watchers -
@AlexanderStaroselsky - 我确实尝试了一个具有相同结果的吸气剂。我认为原因是我的 getter 需要一个参数(
path),所以我的 getter 需要返回一个函数,并且(也许??)阻止它反应?
标签: javascript vue.js vuex