vue &set,Vue.set

  vue &set,Vue.set

  本文主要介绍vue的详细解释。Vue的$set()方法源码案例。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

  在用vue开发项目的过程中,我们经常会遇到这样一个问题:当在vue的数据中声明或赋值一个对象或数组时(数组中的值是一个对象),会给对象添加一个新的属性。如果此属性的值被更新,视图将不会被更新。

  这是因为新添加的属性没有响应性,所以不会触发视图的更新。通常通过使用静态方法Vue.set()或实例方法this来解决。$set()。如何使用它:

  对象:这个。$set(目标,键,值)

  数组:这个。$set(目标,索引,值)

  但是不管是静态方法Vue.set()还是实例方法this。$set(),它们的底层实现逻辑是相同的。实现逻辑如下:

  /**

  *设置对象的属性。添加新属性和

  *如果属性不存在,则触发更改通知

  *已经存在。

  */

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

  //首先判断传入的目标对象是未定义的、空的、原语的,还是抛出警告。

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

  (isUndef(target) isPrimitive(target))

  ) {

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

  }

  //确定目标对象target是数组,键是合法索引

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

  //取目标数组的length值和key的较大值作为目标的length属性。

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

  //通过拼接替换关键位置的元素。

  target.splice(键,1,值)

  返回值

  }

  //如果目标对象中已经存在该键,则直接分配它

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

  目标[键]=值

  返回值

  }

  //获取目标中的观察者对象

  const ob=(target: any)。__ob__

  //如果目标是vue实例或者$data直接返回

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

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

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

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

  )

  返回值

  }

  //如果ob不存在,说明target不是响应对象。直接赋值,无需触发视图更新。

  如果(!ob) {

  目标[键]=值

  返回值

  }

  //如果ob存在,将key设置为响应属性

  defineReactive(ob.value,key,val)

  //发送通知触发视图更新。

  业务部门通知()

  返回值

  }

  以上是vue中set方法的源代码。这里需要注意的是,处理数组时使用的拼接方法并不是数组本身的方法,而是封装在vue中的响应式数组方法。

  关于vue的Vue的源码案例的详细讲解这篇文章到此为止。$set()方法。了解更多关于vue的Vue源代码的信息。$set()方法,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

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

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