zoukankan      html  css  js  c++  java
  • vue 在使用数组的时候,数组内部数据发生变化,视图却没有改变

    data(){
       return{
          todos: [
             {name: 'aa', age: 22},
             {name: 'bb', age: 23}
          ]
       } 
    }
    
    methods:{
         changeTodos(){
            this.todos[0]={name: 'zz', age: 12}
         }
    }
      

    上面我们在改变todos中的数据的时候,页面则没有改变,我们可以使用下面的方法来解决这个问题

      1.使用全局set方法

        this.$set(this.todos, 0, {name: 'zz', age: 12})

        

        this.$set(this.todos[0], 'name', 'zz')

      2.强制更新

        this.$forceUpdate()

        如果我们不想利用$set去设置,可以利用$forceUpdate,因为修改了数据但是页面层没有变动,说明数据本身被修改了,只是vue没有监听到而已,用$forceUpdate就相当于按照最新数据给渲染一下

        changeTodos(){
              this.todos[0]={name: 'zz', age: 12}
          this.$forceUpdate(); }

    监听vue中数组的变化,

      如果只是监听数组列表项的增减即数组长度的改变,直接对数组进行监听就好了

    watch:{
        data(newVal, oldVal) {
            // do
        }
    }
    

      如果是要对数组列表项的内容是否发生改变做监听,则需要加上一个deep: true属性

    watch: {
        data: {
            handler(newVal, oldVal) {
                // do
            },
            deep: true
        }
    }    

      这个属性时深度监听

         数组可以监听新增减少,监听不到值的改变。这个深度监听对数组没有影响。

        对象可以监听属性值改变,监听不到新增属性。主要是对对象的深度监听

  • 相关阅读:
    Mysql蠕虫复制
    Mysql中如何开启慢查询功能?
    线程的状态以及状态切换
    Java的Unsafe类
    Spring 获取jar内外文件的方式
    RocketMQ学习
    volatile的理解
    快速排序
    JVM的发展史
    nginx安装配置
  • 原文地址:https://www.cnblogs.com/zhangning187/p/vuesdjtzn.html
Copyright © 2011-2022 走看看