Vue.set

2019-08-22  本文已影响0人  兰夏天

由于以下两种情况,vue是不能检测到数组变化,也不会触发视图更新

需求描述

项目中响应式对象中添加一个属性,或者动态的通过索引修改数组项,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,

Vue.set( target, propertyName/index, value )

Vue.set(obj,key,keyvalue) //这种方法通用

参数说明:

var obj={name:'xiaxia'}
this.$set(obj,'sex','女')
console.log(obj)  // {name:'xiaxia',sex:'女'}
var obj={name:'xiaxia'}
this.$set(obj,'name','tiantian')
console.log(obj)  // {name:'tiantian',sex:'女'}

数组
例如 增改变数组对应索引

var that=this
   var clonedata = [{name:'hh'},{name:'hh'},{name:'hh'},{name:'hh'},{name:'hh'}]
                        clonedata.map((item, index) => {
                       // 这里是新增一个字段key 
              // 还可以修改,不过要注意,不修改的地方一定哟啊写出来,不然默认的删了没写的属性
                           // Vue.set(item,'key',index+'users')//这种方法通用
                            that.$set(item,'key',index+'users') //虽然我这不是前后分离的项目但经测试这样也可以
                        })
                   
                        console.log(clonedata)

var testArry= [{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'}]
Vue.set(testArry,2,{des:'死不悔改'})
console.log(testArry)
//  [{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{des:'死不悔改'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'}]
var testArry= [{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'}]
Vue.set(testArry,2,{name:'hh',des:'死不悔改'})
console.log(testArry)//  [{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'死不悔改'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'}]
var testArry= [{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'}]
Vue.set(testArry,2,{name:'hh',des:'死不悔改',keycolor:'blue'})
console.log(testArry)
// [{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'},{name:'hh',des:'死不悔改',keycolor:'blue'},{name:'hh',des:'胡乱写'},{name:'hh',des:'胡乱写'}]
上一篇 下一篇

猜你喜欢

热点阅读