【发布时间】:2017-02-15 12:04:51
【问题描述】:
我正在尝试在单个文件组件中使用多个复选框。而且我需要计算属性,但我的设置器中有布尔值 newVal 而不是数组。这是我的代码:
var demo = new Vue({
el: '#demo',
data: {
_checkedNames: []
},
computed: {
checkedNames: {
get: function () {
return this._checkedNames;
},
set: function (newVal) {
console.log(newVal); //with computed we have true/false value instead of array
this._checkedNames = newVal;
}
}
}
})
<script src="https://unpkg.com/vue@2.1.10/dist/vue.js"></script>
<div id="demo">
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
</div>
因此,您将在控制台中看到布尔值。
更新1.详细案例说明
我正在使用模型的遗留代码,它作为参数传递给 vue 组件。而且我需要将组件标记绑定到模型的属性(上面代码中的_checkedNames 模拟了这个模型属性)。此属性通过 getter/setter(有时只是 getter)声明。我想在v-model 构造中使用这样的属性。这个案子对我不起作用。我猜 vuejs 无法正确包装它。我正在寻找一个考虑到上述限制的解决方案(或解决方法)。
vue 论坛里有同样的问题:https://forum.vuejs.org/t/v-model-multiple-checkbox-and-computed-property/6544
【问题讨论】:
-
你能把这里的问题解释清楚一点吗?没看懂
-
感谢您的回复,我没有得到这个问题,因为它缺少 vue js 给出的非常基本的实现说明。例如,为什么所有这些输入都有
v-model="checkedNames"?当所有这些都指向相同的布尔值时,您怎么知道选择了哪一个!使用_checkedNames的目的是什么?它如何绑定到模板。我就是不明白。 -
我建议你在它的网站上阅读更多关于 Vue js 本身的内容。
-
@Soorena 感谢您的评论。这是来自 vue 文档的 multiple checkboxes 实现。而
_checkedNames需要计算属性内部状态。你能检查我的回购吗? -
我克隆了它,它与我用打字稿替换的 ES6 实现完美结合。我找不到 ts 的问题。对不起
标签: vuejs2