v-model在checkbox上遇到的问题总结

如图:

实现在用户列表中输入信息时,下面的列表随之更新,我遇到的问题是,列表更新后,对应的选中状态没有及时更新。

以下为示例代码

<template>
    <div style="border-bottom: 1px solid #e9e9e9;padding-bottom:6px;margin-bottom:6px;">
        <Checkbox @click.prevent.native="handleCheckAll">筛选</Checkbox>
    </div>
    <CheckboxGroup v-model="checkAllGroup">
      <Checkbox v-for="(item,key) in userList" :key="key" :label="item.info"></Checkbox>
    </CheckboxGroup>
</template>
<script>
    export default {
        data () {
            return {
                checkAllGroup: ['香蕉', '香西瓜'],
                userList: [
                  {info:'香蕉'},
                  {info:'苹果'},
                  {info:'香西瓜'},
                  {info:'西瓜'},
                  {info:'不香'},
                  {info:'香薰'}
                ]
            }
        },
        methods: {
          handleCheckAll () {
            let arr = this.userList
            let arrLen = arr.length
            let selectArr = this.checkAllGroup
            this.userList = []
            for (let i = 0; i < arrLen; i++) {
              if (arr[i].info.indexOf('香') !== -1) {
                this.userList.push(arr[i])
              }
            }
          }
        }
    }
</script>

经过我的多方查证,终于找到问题所在。有两个原因导致:

1.$set,关于为什么会用到它,我在官网找到这句话

.

 

然后就根据这段话,对checkAllGroup重新进行了赋值操作。但是用了这个之后,还是有点小问题,第一次搜索时的状态还是不对,如果在列表没有变的情况下,第二次搜索的选中状态值就对了,感觉还是数据同步更新造成的问题。以下是代码示例:


            for (let j = 0; j < selectArr.length; j++) {
              this.$set(this.checkAllGroup, j, selectArr[j])
            }

再次去翻官网文档时,发现了第二个原因

2. $nextTick

根据这段话,对代码又一次完善之后,终于解决了问题。


 

以上就是解决该问题的步骤,不知道这是不是最好的解决方法,但这是我目前能想到的办法,如果以后想到更好的方案,再来补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值