在我的 Model.vue 组件中(在Nuxt.js和Vuetifyjs应用程序中),我有这段代码:
<v-checkbox v-model="selected"></v-model>
在此组件的脚本部分中,我具有:
computed: {
selected: {
get() {
return this.$store.state.selected
},
set(value) {
this.$store.commit('UPDATE_SELECTED', value)
}
},
},
在商店里,我有这个:
mutations: {
UPDATE_SELECTED: (state, value) => {
state.selected.push(value)
}
}
此存储的状态包含选定的条目,如下所示:
state: {
selected: []
}
AFAIK,我遵守了documentation,但是当我单击v-checkbox
组件时,它没有选中/取消选中。怎么了?
答案 0 :(得分:0)
发生此问题是因为您正在使用一个数组来建模名为selected
的布尔状态属性。
因此,根据您的代码,在突变方面,每个突变都将新布尔值推入名为selected
的数组的最新位置。
此外,在计算方面,计算属性的get()
函数将整个数组作为要显示的属性返回,从而导致客户端未选中的复选框。
因此,假设您需要处理多个复选框,为了使当前的复选框能够正常工作,您可以将其编写如下:
Vuex商店
let store = new Vuex.Store({
state: {
selected: []
},
mutations: {
UPDATE_SELECTED: (state, value) => {
//mutating the 0th array position of the selected property
state.selected[0] = value
}
}
})
计算出的属性
computed: {
selected: {
get() {
//getting the 0-index element of the array, assuming this checkbox is the 0th
return this.$store.state.selected[0]
},
set(value) {
this.$store.commit('UPDATE_SELECTED', value)
}
}
}
在这里您找到了working fiddle。
另外,如果您只需要在应用程序状态下处理单个复选框,则将state.selected
属性建模为布尔值就足够了。我的意思是,按如下所示修改Vuex状态就足够了:
state: {
selected: true //or false if you expect unchecked checkbox as default
}