我是Vue的新手,我已经尽可能多地进行了研究,但找不到解决这个奇怪问题的方法。我正在为一个网店构建一个过滤功能,其中一个部分允许使用复选框根据值进行过滤。
我的vue模板如下:
<template>
<div>
<h3>{{data.filterLabel}}</h3>
<ul>
<li v-for="(item, index) in data.options" :key="index">
<input v-model="values" type="checkbox" :id="item" :value="item" :index="index" />
<label class="products__label products__capitalize" :for="item">{{ item }}</label>
</li>
</ul>
</div>
</template>
我从数据库中获取选项,并使用v-for循环遍历data.options
数组。我在中创建了一个新的空数组
data() {
return {
values: []
};
},
如vue.js网站上的表单绑定示例所示:https://v2.vuejs.org/v2/guide/forms.html#Checkbox
我的脚本如下:
<script>
export default {
name: "CheckBoxFilter",
data() {
return {
values: []
};
},
props: {
data: Object,
filterCheckBox: Function
},
watch: {
values: function(value) {
const optionRange = JSON.parse(JSON.stringify(this.values));
this.$emit("filterCheckBox", this.data.filterValue, optionRange);
}
}
};
</script>
出于某种奇怪的原因,$emit函数运行得非常好,并且在UI中正确地过滤了产品数组。但是,当我在复选框中选中一个值时,复选框不会被选中。怎么可能没有勾选复选框,同时又清楚地正确过滤了值?
我甚至用$event.target.checked
查看了:checked
值,它也正确地返回了true
或false
,但UI中仍然没有勾选复选框。
我对收音机按钮也有同样的问题。
<input type="text">
没有问题,<select>
也没有问题。
以前有人经历过这种情况吗?如果有,解决方案是什么?
谢谢!
我进行了测试,UI正确显示了选中/未选中的复选框。你使用哪个版本的Vue?我不确定你想做什么,但我认为通过计算属性公开你的值会更干净:
export default {
name: "CheckBoxFilter",
props: {
data: Object,
},
data() {
return {
internalValues: [],
};
},
computed: {
values: {
get() {
return this.internalValues;
},
set(newVal) {
this.internalValues = newVal;
this.$emit("filterCheckBox", this.data.filterValue, [...newVal]);
},
},
},
};
</script>
对于当前的实现,值的更改是不可观察的,并且永远不会发出filterCheckBox事件。
编辑:我也不明白你为什么设置filterCheckBox道具,它不是React;(