vue中this.$set,Vue.set()

  vue中this.$set,Vue.set()

  我们发现Vue.set()的实现原理和这个。$set()基本都一样,那么Vue.set()和这个有什么区别。$set()?本文将详细介绍,有兴趣的可以了解一下。

  在用vue开发的过程中,我们可能会遇到这样一种情况:当vue实例生成后,当数据再次赋值时,有时不会自动更新到视图中;当我们看vue文档的时候,会发现一句话:如果在实例创建之后添加了新的属性,不会触发视图更新。下面的代码将age属性添加到student对象中。

  data () {

  返回{

  学生:{

  名称: ,

  性别:“”

  }

  }

  }

  Mounted () {//——钩子函数,在实例装入后

  学生年龄=24岁

  }

  受ES5限制,Vue.js无法检测对象属性的添加或删除。因为Vue.js在初始化实例时会将属性转换为getter/setter,所以该属性必须在数据对象上才能让Vue.js转换它并使其响应。

  正确写法:这个。$ set (this.data," key ",value )

  已安装(){

  这个。$set(这个学生,“年龄”,24岁)

  }

  * Vue不允许动态添加根级响应属性。

  例如:

  const app=new Vue({

  数据:{

  答:1

  }

  //render: h=h(Suduko)

  }).$ mount(“# app 1”)

  Vue.set(app.data, b ,2)

  只能使用vue.set (object,propertyname,value)方法向嵌套对象添加响应属性,例如

  var vm=new Vue({

  el:#test ,

  数据:{

  info根属性已经存在于//数据中

  信息:{

  姓名:‘小明’;

  }

  }

  });

  //向信息添加性别属性

  Vue.set(vm.info,性别,男性);

  Vue.set()和this的实现原理。$set()

  我们先来看看Vue.set()的源代码:

  从导入{ set }./观察者/索引

  .

  Vue.set=set

  .

  让我们来看看这个的源代码。$set():

  从导入{ set }./观察者/索引

  .

  Vue.prototype.$set=set

  .

  结果我们发现Vue.set()的实现原理和这个。$set()基本相同,都使用set函数。集合函数是从./观察者/索引文件。不同的是Vue.set()将set函数绑定到Vue构造函数,而这个。$set()将set函数绑定到Vue原型。

  函数集(target: Arrayany Object,key: any,val: any): any {

  if (process.env.NODE_ENV!==生产

  (isUndef(target) isPrimitive(target))

  ) {

  warn(`无法对未定义、null或原始值设置反应属性:${(target: any)} `)

  }

  if(array . is array(target)isValidArrayIndex(key)){

  target . length=math . max(target . length,key)

  target.splice(键,1,值)

  返回值

  }

  如果(键入目标!(在Object.prototype中键入)){

  目标[键]=值

  返回值

  }

  const ob=(target: any)。__ob__

  如果(目标。_ is vue (ob . ob . VM count)){

  process.env.NODE_ENV==生产警告(

  避免向Vue实例或其根$data添加反应性属性

  在运行时-在数据选项中提前声明。

  )

  返回值

  }

  如果(!ob) {

  目标[键]=值

  返回值

  }

  defineReactive(ob.value,key,val)

  业务部门通知()

  返回值

  }

  我们发现set函数接收三个参数,分别是target、key和val,其中target的值是一个数组或者一个对象,正好对应官网给出的调用Vue.set()方法时传入的参数。

  

参考:

  在vue变化检测问题中遇到Pit(数组相关)

  关于Vue.set()和this的使用和区别的这篇文章到此为止。$set()。关于Vue.set()和this的更多信息。$set(),请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: