Ste*_*n-v 2 vue.js vue-component vuex vuejs2
我有一个计算过的二传手:
rating: {
get() {
return this.$store.state.rating;
},
set(value) {
console.log(value);
this.$store.commit('updateFilter', {
name: this.name,
value
});
}
}
Run Code Online (Sandbox Code Playgroud)
这与我的评分相关,如下所示:
<label>
<input type="checkbox" :value="Number(value)" v-model="rating">
{{ index }}
</label>
Run Code Online (Sandbox Code Playgroud)
我希望计算的 setter 记录一个数组,因为当我使用观察者观察评级模型的变化时,我得到了一个数组。
除非我使用像上面这样的计算设置器,它只会true
在选中复选框或false
取消选中复选框时输出。
这里发生了什么,我应该像观察者一样获得一个数组吗?
v-model
有一些“神奇”的行为,特别是当应用于 checkboxes 时。当绑定到数组时,复选框将根据其选中状态在数组中添加或删除值。
它不是在你的例子清楚什么value
是Number(value)
。选中框时,它应该是您想要包含在数组中的值。
以上面链接的 Vue 文档中的示例为例,我已将其修改为使用计算,并且它按您的预期工作,并set
获得了数组的新值。
new Vue({
el: '#app',
data: {
checkedNames: []
},
computed: {
proxyCheckedNames: {
get() {
return this.checkedNames;
},
set(newValue) {
this.checkedNames = newValue;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<div id="app">
<input type="checkbox" id="jack" value="Jack" v-model="proxyCheckedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="proxyCheckedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="proxyCheckedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)