如果未绑定到组件数据,如何设置计算 属性 值
How to set computed property a value if it's not bound to component's data
我有一个组件有一个计算的 属性,它从 Vuex 存储中获取它的值,如下所示:
computed: {
details () {
return this.$store.getters.getDetails
}
}
getDetails getter returns 具有多个属性的对象。
现在的问题是,如何在定义它的组件中更新 'details' 对象的属性?
如果是通过 UI,那么它可以通过 v-model 完成。但它需要通过组件的方法来完成。像下面这样:
methods: {
someMethod () {
// here I need to update props of 'details' object, but how?
}
}
既然你在使用 Vuex,那就在商店里做吧。
假设您的 details
对象是这样的:
details: { foo: 1, bar: 2 }
然后在state中添加修改details
对象的mutation(我用and
因为不知道你是不是只想修改属性的一个details
或实际上想为其分配一个新对象):
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
details: { foo: 1, bar: 2 }
},
getters: {
getDetails: (state, getters) => {
return state.details;
}
},
mutations: {
UPDATE_DETAILS (state, payload) {
this.$set(state.details, payload.key, payload.val)
},
REPLACE_DETAILS (state, payload) {
state.details = payload
}
}
});
然后在你的组件中:
// ...
methods: {
// ...
updateDetails(key, val) {
this.$store.commit('UPDATE_DETAILS', { key, val });
},
replaceDetails(obj) {
this.$store.commit('UPDATE_DETAILS', obj);
}
}
更新:我所说的基本上是对@Bert 在他的评论中试图表达的内容的更长解释。
我有一个组件有一个计算的 属性,它从 Vuex 存储中获取它的值,如下所示:
computed: {
details () {
return this.$store.getters.getDetails
}
}
getDetails getter returns 具有多个属性的对象。 现在的问题是,如何在定义它的组件中更新 'details' 对象的属性? 如果是通过 UI,那么它可以通过 v-model 完成。但它需要通过组件的方法来完成。像下面这样:
methods: {
someMethod () {
// here I need to update props of 'details' object, but how?
}
}
既然你在使用 Vuex,那就在商店里做吧。
假设您的 details
对象是这样的:
details: { foo: 1, bar: 2 }
然后在state中添加修改details
对象的mutation(我用and
因为不知道你是不是只想修改属性的一个details
或实际上想为其分配一个新对象):
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
details: { foo: 1, bar: 2 }
},
getters: {
getDetails: (state, getters) => {
return state.details;
}
},
mutations: {
UPDATE_DETAILS (state, payload) {
this.$set(state.details, payload.key, payload.val)
},
REPLACE_DETAILS (state, payload) {
state.details = payload
}
}
});
然后在你的组件中:
// ...
methods: {
// ...
updateDetails(key, val) {
this.$store.commit('UPDATE_DETAILS', { key, val });
},
replaceDetails(obj) {
this.$store.commit('UPDATE_DETAILS', obj);
}
}
更新:我所说的基本上是对@Bert 在他的评论中试图表达的内容的更长解释。