我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化
原因如下:
**受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。 **
官方API:Vue.set():
此时我们需要知道Vue.set()需要哪些参数,
调用方法:Vue.set( target, key, value )
target:要更改的数据源(可以是对象或者数组)
key:要更改的具体数据
value :重新赋的值
Tip:Vue.set()在methods中也可以写成this.$set()
解决办法:
this.$set(this.oilBrandsArr[index], 'checked', true)
**注意: **如果要对这个对象进行$set操作就不要用别的方法对这个对象进行操作,否则this.$set()则不会生效
this.oilBrandsArr[i].checked = true
别的地方又用this.$set() 则都不会触发更新
附加:有时你想向一个已有对象添加多个属性,例如使用 Object.assign() 或 _.extend() 方法来添加属性。但是,这样添加到对象上的新属性不会触发更新。在这种情况下可以创建一个新的对象,让它包含原对象的属性和新的属性:
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })