关于vue中数据更新视图不同步更新的问题

文章讲述了在Vue应用中,由于`check`属性是非响应式的,导致切换tab时视图未更新。解决方法是使用`this.$set`方法将其转换为响应式数据。作者提供了修改后的`checkCaseMenu`函数和数据处理代码示例。
摘要由CSDN通过智能技术生成

一、问题说明

源码如下:

          <div class="caseMenuItem">
            <span
              v-for="(item, index) in menuData"
              :key="index"
              @click="checkCaseMenu(index)"
              :class="{ check: item.check }"
              >{{ item.dictValue }}</span
            >
          </div>
async mounted() {
    await this.$axios
      .get("接口地址")
      .then((res) => {
        this.Data.forEach((item) => {
          item.check=false
        });
        this.Data[0].check=true);
      });
  },
checkCaseMenu(index) {
      this.Data.forEach((item, i) => {
       item.check= i == index ? true:false
      });
    },

当切换tab时(即checkCaseMenu执行后),虽打印item.check为正确值,但对应视图并未更新,check类并未添加在对应项上。

二、解决

原因为新增的check属性非响应式数据,解决方法为使用vue中的set设置check的值,可自动将数据转换为响应式数据。如:

this.Data.forEach((item) => {
          this.$set(item, "check", false);
        });
        this.$set(this.Data[0], "check", true);
checkCaseMenu(index) {
      this.Data.forEach((item, i) => {
        this.$set(item, "check", i == index ? true : false);
      });
    },

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值