关于vue中$set的使用

Posted 老张在线敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于vue中$set的使用相关的知识,希望对你有一定的参考价值。

this.$set的使用

在平时使用vue进行开发的时候,我经常会遇到一个这样的问题:

就是当data中包含声明且已赋值的对象或者数组(数组包对象)时,我们要向当前的这个对象中添加一个新的属性并且更新,结果发现并不会更新视图,只在控制台打印

<template>
  <div>
      <span>obj</span>
      <input type="button" @click="add()">
  </div>
</template>

<script>
export default 
    data()
        return
            obj:
                name:"小明"
            
        
    ,
    methods:
        add()
            if(!this.obj.age)
                this.obj.age = 20
            else
                this.obj.age++
            
        
    

</script>

<style>

</style>

受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。

所以在data中注册的对象是响应式的,而后来添加的属性不是响应式的,只是个普通的属性,为了避免上面出现的问题,我们使用this.$set来向响应式对象中添加响应式的新属性

语法:this.$set(target,key,value)

target:目标对象(要更改的那个对象/数组)

key:要更改的具体属性(新属性)

value:新属性的值(或者重新赋的值)
<template>
  <div>
      <span>obj</span>
      <input type="button" @click="add()">
  </div>
</template>

<script>
export default 
    data()
        return
            obj:
                name:"小明"
            
        
    ,
    methods:
        add()
            if(!this.obj.age)
            	//语法:
                this.$set(this.obj,"age",23)
            else
                this.obj.age++
            
        
    

</script>

<style>

</style>

以下为转载内容
$ set /Vue.set
$ nexttick,$ set

以上是关于关于vue中$set的使用的主要内容,如果未能解决你的问题,请参考以下文章

关于vue子组件的数据变了视图不更新的解决办法(转载)

关于vue数组中对象属性变更页面没重新渲染的问题

VUE关于data对象中数组修改和对象添加属性的响应式问题

关于数组的响应式方法和非响应式方法

Vue修改对象或数据,页面没有相应更改

关于vue的响应式原理