【发布时间】:2019-08-31 05:18:42
【问题描述】:
我想为 vuex 状态创建一个突变,但让它动态更新状态 - 让有效负载包含我要从中删除元素的对象的路径和键。
- 调度操作
deleteOption(path, key)
{ this.$store.dispatch('deleteOptionAction', {path, key}) }
- 提交突变
deleteOptionAction ({ commit }, payload) { commit('deleteOption', payload) }
- 突变接收路径 = 'state.xmlValues.Offers[0].data.Pars' 和 key = 0 的负载
deleteOption (state, payload) {
let stt = eval('state.' + payload.path)
Vue.delete(stt, payload.key)
// delete stt[payload.key] - works the same as Vue.delete
state.xmlValues.Offers[0].data.Pars = Object.assign({}, Object.values(stt))
}
我尝试使用 state[payload.path] 语法 - 但这不起作用。 该路径包含字符串“state.xmlValues.Offers[0].data.Pars”,因此为了使其正常工作,我使用了 let stt = eval('state.' + payload.path)。 但是,从状态中删除元素变得很棘手: 使用 Vue.delete(stt, payload.key) 时 - 它只会删除本地存储在 stt 变量中的元素键,而不是状态。
然后我用 stt 重新分配状态对象(所需元素已从中删除),硬编码路径 - 这就是我试图避免的:
state.xmlValues.Offers[0].data.Pars = Object.assign({}, Object.values(stt))
如何将路径传递给存储,然后使用它来删除状态中的对象而不显式硬编码路径?
至于我的其他突变 addOption,我也使用了状态对象的动态路径 - 当使用在 stt 中评估的动态路径时效果很好
addOption (state, payload) {
let stt = eval('state.' + payload.path)
Vue.set(stt, payload.key, payload.newEl)
}
【问题讨论】:
标签: javascript vue.js vuex vue-reactivity