【问题标题】:Vue v-model does not select value on checkboxVue v-model 不选择复选框上的值
【发布时间】:2021-08-26 14:57:18
【问题描述】:

我对 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://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 值,它也正确返回了truefalse,但该复选框仍未在UI 中勾选。

单选按钮也有同样的问题。

&lt;input type="text"&gt; 没有问题,&lt;select&gt; 也没有问题。

以前有没有人遇到过这种情况,如果有,解决办法是什么?

谢谢!

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    我进行了测试,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 ;)

    【讨论】:

    • 事实证明,我写这篇文章的公司已经编写了自己的 CSS 框架,并以自定义方式显示或不显示选中状态。因为这是自定义样式,所以它没有正确显示选中状态,因为复选框顶部有一个 div,显示选中状态的 SVG!但是,我确实发现您对计算属性的回答很有价值,并已在我的代码中实现了这一点,谢谢!
    猜你喜欢
    • 2018-02-14
    • 2019-03-14
    • 1970-01-01
    • 2020-12-03
    • 2020-01-21
    • 2019-08-12
    • 1970-01-01
    • 2021-04-30
    • 2022-07-15
    相关资源
    最近更新 更多