zoukankan      html  css  js  c++  java
  • vue对象数组数据变化,页面不渲染

    很多时候,我们习惯于这样操作数组和对象:
     data() { // data数据
            return {
              arr: [1,2,3],
              obj:{
                  a: 1,
                  b: 2
              }
            };
          },
       // 数据更新 数组视图不更新
        this.arr[0] = 'OBKoro1';
        this.arr.length = 1;
        console.log(arr);// ['OBKoro1'];
        // 数据更新 对象视图不更新
        this.obj.c = 'OBKoro1';
        delete this.obj.a;
        console.log(obj);  // {b:2,c:'OBKoro1'}
    
    由于js的限制,Vue 不能检测以上数组的变动,以及对象的添加/删除,很多人会因为像上面这样操作,出现视图没有更新的问题。
    解决方式:
    1. this.$set(你要改变的数组/对象,你要改变的位置/key,你要改成什么value)
      this.$set(this.arr, 0, "OBKoro1"); // 改变数组
      this.$set(this.obj, "c", "OBKoro1"); // 改变对象
      
      2.数组原生方法触发视图更新

        vue可以监听到数组原生方法导致的数据数据变化

      

    splice()、 push()、pop()、shift()、unshift()、sort()、reverse()
    
    意思是使用这些方法不用我们再进行额外的操作,视图自动进行更新。
    推荐使用splice方法会比较好自定义,因为slice可以在数组的任何位置进行删除/添加操作
    3.替换数组/对象
    比方说:你想遍历这个数组/对象,对每个元素进行处理,然后触发视图更新。
  • 相关阅读:
    《深度探索C++对象模型》1
    《C++标准库》
    关于多级分类的封装
    git常用命令
    使用BigDecimal进行精确运算
    关于强制装换
    page分页
    pageContext.request.contextPath 和 request.getContextPath()
    springMVC + mybatis 搜索 分页等
    mybatis 动态sql
  • 原文地址:https://www.cnblogs.com/monkeySoft/p/13037559.html
Copyright © 2011-2022 走看看