• vue中data数据更新,视图却没有更新的原因


    由于 JavaScript 的限制,Vue 不能检测以下数组的变动:

    var vm = new Vue({
    data: {
    items: ['a', 'b', 'c']
    }
    })
    vm.items[1] = 'x' // 不是响应性的
    vm.items.length = 2 // 不是响应性的

    当利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
    可以使用:

    Vue.set(vm.items, indexOfItem, newValue);或者:vm.$set(vm.items, indexOfItem, newValue)
    vm.items.splice(indexOfItem, 1, newValue)
    当修改数组的长度时,例如:vm.items.length = newLength
    可以使用:vm.items.splice(newLength)

    由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除:

    因为Vue 会在初始化实例时对属性执行 getter/setter 转化,所以属性必须在 data 对象上存在才能让 Vue 将它转换为响应式的。

    var vm = new Vue({
    data: {
    a: 1
    }
    })
    // `vm.a` 现在是响应式的
    
    vm.b = 2
    // `vm.b` 不是响应式的

    对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性。

    var vm = new Vue({
    data: {
    userProfile: {
    name: 'Anika'
    }
    }
    })
    
    Vue.set(vm.userProfile, 'age', 27)

    或者:可以使用 vm.$set 实例方法,它只是全局 Vue.set 的别名:

    vm.$set(vm.userProfile, 'age', 27)
    如果为已有对象赋值多个新属性:

    vm.userProfile = Object.assign({}, vm.userProfile, {
    age: 27,
    favoriteColor: 'Vue Green'
    })

    也可能是因为写的代码比dom更新执行得快,可以使用this.$nextTick()将代码延迟到下次dom更新之后执行。

    跟全局方法 Vue.nextTick() 一样,不同的是回调的 this 自动绑定到调用它的实例上。

    this.value = '你好啊';
    this.$nextTick(() => {
    console.log(this.$refs['hello'].innerText);
    });

    修改数组中对象的值:

    //data中list的值
    list: [
    {
    name:'Lee',
    age:20
    }
    ]
    
    //响应式修改值
    this.list[0].name = "Joh";
    this.$set(this.list,0,this.list[0]);

    原文链接:https://blog.csdn.net/wsln_123456/article/details/95218723

  • 相关阅读:
    五种线程池的分类与作用
    什么是死锁?
    事务隔离级别区分,未提交读,提交读,可重复读
    共享锁(读锁)和排他锁(写锁)
    java中的成员变量和全局变量的区别
    Algorithm
    6
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/planetwithpig/p/13027379.html
Copyright © 2020-2023  润新知