我已经仔细阅读了Vue文档“Reactivity in Depth”和vm.$set和Vue.set的API,但是我仍然很难决定何时使用哪一个。能够区分这两者对我来说很重要,因为在我当前的Laravel项目中,我们动态地设置了对象的许多属性。
文档中的区别似乎在于vm.$set是“For Vue instance”而Vue.set是“For plain data objects”的语言和Vue.set是全局的语言之间的区别:
但是,有一些方法可以添加属性,并使其在创建示例后具有React性。
对于Vue示例,可以使用$set(path,value)示例方法:
vm.$set('b', 2)
// `vm.b` and `data.b` are now reactive
对于普通数据对象,可以使用全局Vue.set(object,key,value)方法:
Vue.set(data, 'c', 3)
// `vm.c` and `data.c` are now reactive
最后,我想知道执行上述操作的第三个“选项”(用于一次添加多个属性)是否可以用作上述两个选项中任何一个的等效替代品(通过仅添加一个属性而不是多个属性)?
有时候你可能想给一个已有的对象分配一些属性,例如使用Object.assign()或_.extend()。然而,添加到对象的新属性不会触发改变。在这种情况下,创建一个新的对象,其属性来自原始对象和mixin对象:
// instead of `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
3条答案
按热度按时间nxagd54h1#
下面是Vue.set的发布说明:
Vue不再使用$set和$delete方法扩展Object.prototype。这已经导致在某些条件检查中依赖于这些属性的库出现问题(例如Meteor中的minimongo)。使用新的全局方法Vue.set(object,key,value)和Vue.delete(object,key)代替object.$set(key,value)和object.$delete(key)。
因此,
.$set
过去在 * 所有 * 对象上可用-现在它只在视图模型本身上可用。因此,Vue.set
现在用于那些您引用了React对象但没有引用它所属的视图模型的情况。flseospp2#
简单地说,两者是相同的,
$set
在组件(示例)内可用,如this.$set()
,其中Vue.set
是全局可用的静态方法。zvokhttg3#
发现向
.$set()
对象添加多个属性一次即可,可能Vue首先将这些添加的属性收集到一个序列中,然后将这些序列应用于getter和setter;例如:X1 M1 N1 X也与X1 M2 N1 X一样具有React性