Vue系列-$set

what:$set提供了属性赋值方法

vue实例额外提供了$set方法来进行对象的属性赋值

方法使用如下:

$set(target:Object,key:String,value:*);

{
   data:{
        test:{
              name:"ljx"
        }
    },
    created:function(){
        var _self=this
        _self.$set(_self.test,"name","lijiaxin");
        //如此就为test对象的name属性赋值为字符串lijiaxin
    }
}
why:有了操作符.为什么还会有$set

通常为vue的数据进行属性赋值时,经常是使用操作符.直接操作,然后通过双向数据绑定直接修改dom

<div id="app">
      <span v-html="test.name"></span>
</div>

{
    el:"#app",
    data:{
        test:{
              name:"ljx"
        }
    },
    created:function(){
        var _self=this
        _self.test.name="lijiaxin";
    }
}

这种情况下,数据赋值成功后,Vue的双向数据绑定,会同时渲染到span元素,改变innerHtml

当如果为该对象之前并不存在的属性使用操作符.赋值,并不会触发双向数据绑定

<div id="app">
      <span v-html="test.age"></span>
</div>

{
    el:"#app",
    data:{
        test:{
              name:"ljx"
        }
    },
    created:function(){
        var _self=this
        _self.test.age="26";
    }
}

此时span元素并没有渲染为26

因为vue的数据响应是在created之前就按照data配置进行数据的绑定劫持,重新新增的属性并没有绑定劫持,所以无法实时映射dom变化
$set作为操作符.的变种方法,通过内部方法机制满足了这种新增属性劫持的处理

<div id="app">
      <span v-html="test.age"></span>
</div>

{
    el:"#app",
    data:{
        test:{
              name:"ljx"
        }
    },
    created:function(){
        var _self=this
       _self.$set(_self.test,"age","26");
    }
}

此时span元素重新渲染为26
how:$set是怎么处理的

$set操作时,针对新增的属性会重新将其通过Object.defineProperty进行劫持,并触发父级的依赖刷新,完成新的依赖收集

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • VUE介绍 Vue的特点构建用户界面,只关注View层简单易学,简洁、轻量、快速渐进式框架 框架VS库库,是一封装...
    多多酱_DuoDuo_阅读 2,742评论 1 17
  • # 在本文中,笔者又提炼了以下几个重点 补偿双向数据绑定 Vue.$set 数据侦听 Vue.$watch 表单绑...
    果汁凉茶丶阅读 1,483评论 1 15
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,274评论 0 25
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,104评论 0 2