this.$nextTick使用

uniapp checkbox-group 项循环

<checkbox-group @change="checkboxChange">
        <label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in items" :key="index">
          <view class="box">
            <view>
              <checkbox color="#D1B37D" :value="item.id" :checked="item.checked" />
            </view>
            <view class="xuhao">{{index+1}}</view>
            <view>{{item.appName}}</view>
            <view><text class="red">{{item.integralNum}}</text>积分</view>
          </view>
        </label>
</checkbox-group>

下面是全选复选框

<view class="wenzi">
        <checkbox :checked="allCheck" @click="toqx" />点击全部选中提现
 </view>

当点击复选框全选的时候
循环 给每一项 this.$set(item, ‘checked’, this.allCheck)
this.integral是选中的每一项 id

toqx() {
        this.allCheck = !this.allCheck
        let items = this.items
        items.forEach((i, idx) => {
          const item = items[idx]
          this.$set(item, 'checked', this.allCheck)
        })
        this.integral = []
        if (this.allCheck) {
          items.forEach((item, index, array) => {
            this.integral.push(item.id)
          });
        } else {
          this.integral = []
        }
        console.log(this.integral)
  },

点击全选时 checkbox-group里每一项视图都显示选中,且 this.integral 数组数据都能拿到完整
取消checkbox-group里的某一项 或 某几项 这时候 视图和数据也是最新正确的
但是再点击全选 会发现 取消的项没选上 视图没更新,但是此时this.integral 数据是最新的 完整的

解决:

data里
someShow: true,

refresh() {
        this.someShow = false
        this.$nextTick(function() {
          this.someShow = true
        })
 },

将 v-if=“someShow” 放 checkbox-group 上
在全选事件里调用 this.refresh() 方法

原理:
一个事件循环中发生的所有数据改变都会在下一个事件循环的Tick中来触发视图更新,这也是一个“批处理”的过程。
理解的还不是很透彻 待更新.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值