Vue中改变对象的注意事项

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'

})

以上是 Vue中改变对象的注意事项 的全部内容, 来源链接: utcz.com/z/375400.html

回到顶部