Vue中对数组变化监听

释放双眼,带上耳机,听听看~!

Vue中对数组变化监听

前言

我们在实际开发中,经常要对数组进行操作,最为常见的方法就是直接对数组中的某个元素进行赋值,比如下面这样的:

<script>
   export default {
       data() {
           return {
               comments: [],
               isReply: [0, 0, 0, 0, 0]
          };
      },
       methods: {
           replyTo: function (index) {
               console.log(this.isReply);
               isReply[index] = 1
               console.log(this.isReply);
          }
      },
  };
</script>

但是虽然数组中的元素改变了,但是vue却不能监听到变化,同时我们引入watch来检测也是没有效果,如下所示

<script>
   export default {
       data() {
           return {
               comments: [],
               isReply: [0, 0, 0, 0, 0]
          };
      },
     watch: {
       isReply: {
         handler(val, oldval) {

        },
         deep: true
      }
    },
       methods: {
           replyTo: function (index) {
               console.log(this.isReply);
               isReply[index] = 1
               console.log(this.isReply);
          }
      },
  };
</script>

从上述例子,我们发现vue是不会响应数据变化而重新去渲染页面。在vue中仅需要通过修改赋值语句的方式,即可让vue响应数组数据的变化。具体操作如下:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)

// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

具体案例如下

<script>
  import Comment from '../components/Comment'

  export default {
      data() {
          return {
              comments: [],
              isReply: [0, 0, 0, 0, 0]
          };
      },
      watch: {

      },
      components: {
          Comment
      },
      methods: {
          replyTo: function (index) {

// 最后一个参数为我们需要改变的值
              this.isReply.splice(index, 1, 1);

              this.$set(this.isReply, index, 1);

          }
      },
  };
</script>

给TA买糖
共{{data.count}}人
人已赞赏
HTML教程Vue.Js

测试

2021-9-4 0:25:49

Vue.Js

使用Axios拦截器携带token以及跳转错误页面

2021-9-6 10:07:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索