跳到主要内容

解释Vue.set 改变数组和对象中的属性 ?

参考答案:

Vue.set 方法是 Vue.js 提供的一个全局方法,用于解决 Vue.js 不能检测到对象属性的添加或删除的问题。Vue.js 在初始化时会递归遍历 data 中的所有属性,并使用 Object.defineProperty 把这些属性转化为 getter/setter,从而实现数据的双向绑定。然而,Object.defineProperty 只能检测到属性的读取和修改,但不能检测到属性的添加或删除。

对于数组,Vue.js 提供了一些修改数组的方法,如 push、pop、shift、unshift、splice、sort、reverse,这些方法在修改数组时,会触发视图的更新。但是,如果直接使用索引给数组赋值,如 arr[indexOfItem] = newValue,Vue.js 是无法检测到这个变化的,因此视图也不会更新。

对于对象,Vue.js 也无法检测到属性的添加或删除。例如,如果我们有一个对象 obj,并且我们想添加一个新的属性 obj.newProperty = 'value',Vue.js 是无法检测到这个变化的。

为了解决这个问题,Vue.js 提供了 Vue.set 方法。Vue.set 方法接受三个参数:

  1. target:要修改的对象或数组。
  2. key:要添加或修改的属性名或索引。
  3. value:要添加或修改的属性值。

Vue.set 方法实际上就是在内部调用了 Object.defineProperty,从而实现了属性的添加或修改,并且能够触发视图的更新。

例如,如果我们想修改一个数组 arr 的第 index 个元素,我们可以这样写:

Vue.set(arr, index, newValue)

如果我们想给一个对象 obj 添加一个新的属性 newProperty,我们可以这样写:

Vue.set(obj, 'newProperty', 'value')

这样,无论是修改数组还是添加对象属性,Vue.js 都能检测到这些变化,并触发视图的更新。