【发布时间】:2018-10-12 00:12:58
【问题描述】:
我试图在一些组件(子组件)之间共享一个状态,其中每个子组件(和父组件)都可以更新共享属性(存储在 vueX 状态中)。
我在这里做了一个小“如何重现”:
Vue.component('urlQueryComponent', {
template: '<div>object: {{pathQuery}}</div>',
computed: {
pathQuery () {
return this.$store.state.urlQuery;
}
}
})
https://codepen.io/anon/pen/rvmLrZ?editors=1010
当我在子组件中更新状态时,没有处理更改。
VueX 实例:
const store = new Vuex.Store({
state: {
urlQuery: {
path: '',
query: {}
}
},
mutations: {
pushQuery: (state, type) => {
state.urlQuery.query[type.key] = type.value;
console.log('urlQuery: ', state.urlQuery);
},
pushPath: (state, path) => {
state.urlQuery.path = path;
}
},
getters: {
getUrlQuery: state => state.urlQuery
}
})
以及父组件:
new Vue({
el: '#app',
store,
methods: {
changeType (type) {
this.$store.commit('changeType', type);
}
}
})
编辑:
经过反思,之前的代码并没有真正针对我的问题。 This fiddle 更针对我的问题。
【问题讨论】:
-
您似乎创建了新属性。所以使用Vue API: set;喜欢
this.$set(state.urlQuery.query, type.key, type.value) -
您可以使用
this.$set()或Ojbect.assign() -
@AdrianoResende,是的。我用
Vue.set()解决了我的问题