我在我的组件中使用商店值并尝试更新它。当我点击按钮时,商店值会发生变化,但更改不会反映在组件输出中(即{{query}})
<template>
span {{query}}
button(@click='updateQuery')
</template>
<script>
export default {
computed: mapState('map', [
'query'
]),
methods: {
...mapMutations('map', [
'setStart'
]),
updateQuery() {
this.setStart(new Date());
}
}
}
</script>
存储
export default {
namespaced: true,
state: {
query: {},
start: null,
end: null
},
mutations: {
setQuery(state, value) { state.query = value },
setStart(state, value) {
state.start = value;
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
state.query.timestamp.$gte = value;
},
setEnd(state, value) {
state.end = value;
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
state.query.timestamp.$lte = value;
},
}
}
答案 0 :(得分:2)
此处的问题是Vue cannot detect,您要动态地向query
对象添加新属性。
在此代码中:
state.query.timestamp = state.query.timestamp ? state.query.timestamp : {};
您正在向timestamp
添加query
属性,之前不存在。因此,它不会被动反应。为了正确使用Vue,您需要使用Vue.set。
Vue.set(state.query, `timestamp`, state.query.timestamp ? state.query.timestamp : {})
注意,您还需要在$gte
属性的下一行执行此操作。
或者,您可以初始化查询对象。
state: {
query: {
timestamp:{
$gte: null,
$lte: null
}
},
start: null,
end: null
},