Vue.set

作者: 兰夏天 | 来源:发表于2019-08-22 17:25 被阅读0次

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

  • 1 通过索引直接设置数组的项,
  • 2 直接修改数组长度
  • 3 无法探测普通的新增属性 (比如 this.myObject.newProperty = 'hi')

需求描述

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

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

  • 参数

    • {Object | Array} target 需要动态设置的对象或者数组

    • {string | number} propertyName/index 如果是对象就属性要是字符串类型,如果是数组,索引要是数字类型,

    • {any} value 值可以是任意的类型 对象,数组,字符串,等

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

参数说明:

  • 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:'胡乱写'}]

相关文章

  • Vue.set全局操作(11)

    一、Vue.set()Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。 在data后面直...

  • Vue数据响应思路(五)—— 实现Vue.set

    Vue.js 中, Vue.set 和 vm.$set 是一回事,其中 vm.$set 是 Vue.set 的别名...

  • Vue.set全局操作及改变数据的三种方法

    Vue.set Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。比如在vue构造器内部定...

  • vue改变数组或对象视图没更新

    调用方法:Vue.set( target, key, value )进行解决

  • VUE api等

    全局 api Vue.nextTick Vue.set( target, propertyName/index, ...

  • Vue.set()和this.$set()区别

    Vue.set()的源码import { set } from '../observer/index'...Vue...

  • vue强制更新

    使用update this.$forceUpdate(),强制视图更新 用vue.set this.$set(th...

  • Vue.set

    Vue2.0 Vue.set的使用 2017年11月29日 16:11:24 阅读数:29806 标签: vue ...

  • vue.set()

    vue为了更加简洁,当data的数据是数组或者对象时,动态的添加或删除,视图将不会更新Vue.set()可以用来设...

  • Vue.set

    由于以下两种情况,vue是不能检测到数组变化,也不会触发视图更新 1 通过索引直接设置数组的项, 2 直接修改数组...

网友评论

      本文标题:Vue.set

      本文链接:https://www.haomeiwen.com/subject/hjcosctx.html