我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化

原因如下:

**受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。https://cn.vuejs.org/v2/guide/reactivity.html**

官方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 })

01-18 04:26