请解释 vm.$set(obj, key, val) ?
参考答案:
vm.$set(obj, key, val)
是 Vue.js 中的一个方法,用于向响应式对象中添加一个新的属性,并确保这个新属性同样是响应式的,即当它的值发生变化时,视图会自动更新。
在 Vue.js 中,当你创建一个对象并将其作为 Vue 实例的 data 属性时,Vue 会遍历这个对象的所有属性,并使用 Object.defineProperty 将它们转化为 getter 和 setter,使得当这些属性的值发生变化时,Vue 能够感知到并触发重新渲染。
但是,如果你后来向这个对象添加了一个新的属性,Vue 默认是不会感知到这个变化的,因为这个新属性并没有经过 Vue 的响应式处理。这时,你就可以使用 vm.$set
方法来手动添加这个新属性,并确保它是响应式的。
具体来说,vm.$set(obj, key, val)
的三个参数分别是:
obj
:要添加新属性的对象。key
:要添加的新属性的键名。val
:要添加的新属性的值。
例如,假设你有一个 Vue 实例 vm
,并且它有一个 data 属性 obj
:
new Vue({
el: '#app',
data: {
obj: {
a: 1,
b: 2
}
}
})
如果你后来想要向 obj
添加一个新的属性 c
,你可以这样做:
vm.$set(vm.obj, 'c', 3)
这样,obj
就变成了一个新的响应式对象,包含了 a
、b
和 c
三个属性。当 c
的值发生变化时,Vue 会自动感知到并触发重新渲染。
需要注意的是,vm.$set
只能用于向已经存在的对象添加新属性。如果你想要创建一个全新的响应式对象,你应该直接在 Vue 实例的 data 属性中定义它。