Vue ‘v-model‘ directives require the attribute value which is valid as LHS.

1、问题描述

在项目开发中,如果将el-checkbox组件的v-model指令改为使用三元表达式时,会报出【vue/valid-v-model】的错误,如下图所示:

2、分析原因

根据错误提示,是因为v-model指令始终把Vue实例的data视为数据真实的来源,要求其绑定的值必须是一个合法的值(LHS),而三元表达式则不能保证其返回值一定是一个HLS值,不能要求v-model一次性观察多个变量。

3、问题解决

知道具体原因了,那么解决这个问题的方法,是将v-model指令改为使用  :value  和  @change  两个属性来分别绑定状态值和状态变更事件。
具体来说,你可以在el-checkbox组件上使用:value属性来绑定当前行数据中的状态值,使用@change属性来指定状态变更事件的处理方法。示例代码如下:

上述代码中,我们首先使用了一个名为  checkboxValue  的计算属性,来对  item.checked  进行转换,
在el-checkbox组件中,我们将 :value 属性绑定到  checkboxValue(item.checked)  方法,动态改变选中状态。
最后,我们在 @change 事件中调用  checkboxChange() 方法,来处理状态变更事件。


<template>
   <li v-for="(item,index) in tableData" :key="index">
       <div class="content-item">
           <el-checkbox :value="checkboxValue(item.checked)" @change="checkboxChange(item,index,$event)">选择城市</el-checkbox>
       </div>
   </li>
</template>
export default {
  data() {
    return {
      tableData: [],
    };
  },

  computed: {
    checkboxValue() {
      return function(val) {
        return val === ''
      };
    },
  },

  methods: {
    checkboxChange(item,index,e) {
      console.log("checkboxchange:", item,index,e);
      // 这里可以发送 API 请求,更新数据库中对应行的状态值
      item.checked= e ? '' : '上海'
      this.$set(this.tableData,index,item); // 手动修改数据
    },
  },
};
</script>

 4、总结

在上述代码中,我们将计算属性改为普通函数,并且在调用时传入了 item 数据。这样就能够正常获取到 item 数据,并根据 item.checked 的值来返回选中状态了。
需要注意的是,在 checkboxChange() 方法中仍然需要手动修改 item.checked 的值,并且如果该组件的 item.checked 值从后端接口中获取,则需要在接口响应后先将tableData中的数据更新,然后调用 this.$forceUpdate() 重新强制渲染页面,否则多选框组件显示的状态不会随着 item.checked 的变化而变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aotman_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值