zoukankan      html  css  js  c++  java
  • Vue中改变对象的注意事项

    数组更改注意事项

    Vue无法检测到以下方式变动的数组

    • 当你利用索引直接设置一个项时,例如:vm.items[index] = newValue
    • 当你修改数组的长度时,例如:vm.items.length = newLength
      针对问题一,解决方案有两种:
    var vm = new Vue({
      data: {
        items: ['a', 'b', 'c']
      }
    })
    // 问题
    vm.items[1] = 'x' // 不是响应性的
    vm.items.length = 2 // 不是响应性的
    //  解决方案
    Vue.set(vm.items, indexOfItem, newValue);//方案一
    vm.$set(vm.items, indexOfItem, newValue);//等同于方案一
    vm.items.splice(indexOfItem, 1, newValue);//方案二
    

    对象更改注意事项

    Vue无法检测到对象属性的添加和删除。对于已经创建的实例,Vue 不能动态添加根级别的响应式属性,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性。

    Vue 不能动态添加根级别的响应式属性:

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

    嵌套对象添加响应式属性:

    var vm = new Vue({
      data: {
        userProfile: {
          name: 'Anika'
        }
      }
    })
    // 问题
    vm.userProfile.age = 27;// 非响应
    // 解决方案
    Vue.set(vm.userProfile, 'age', 27);// 方案一
    vm.$set(vm.userProfile, 'age', 27);// 等同方案一
    vm.userProfile = Object.assign({}, vm.userProfile, {
      age: 27,
      favoriteColor: 'Vue Green'
    });// 方案二
    //方案二是用两个对象的属性创建一个新的对象,注意不要使用以下方式,因为此种方式是与vm.userProfile.age = 27的本质是一样的,均是非响应属性。
    Object.assign(vm.userProfile, {
      age: 27,
      favoriteColor: 'Vue Green'
    })
    
  • 相关阅读:
    (转)Entity Framework 4.1 之三(由4.0过渡到4.1/4.3)
    (转)修改的T4代码生成器(续)
    (转)【Smart Code Generator】 基于T4的代码生成器
    linux下播放mp3
    poj 2777 Count Color
    poj 1062 昂贵的聘礼
    uva 991 Safe Salutations
    uva 10587 Mayor's posters
    poj 2528 Mayor's posters
    逆序数
  • 原文地址:https://www.cnblogs.com/youhong/p/9364261.html
Copyright © 2011-2022 走看看