返回顶部
首页 > 资讯 > 精选 >Vue.set()和this.$set()的区别是什么
  • 878
分享到

Vue.set()和this.$set()的区别是什么

2023-06-15 07:06:01 878人浏览 独家记忆
摘要

Vue.set()和this.$set()的区别是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。data () {  return&

Vue.set()和this.$set()的区别是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

data () {  return {    student: {      name: '',      sex: ''    }  }}mounted () { // ——钩子函数,实例挂载之后  this.student.age = 24}

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

正确写法:this.$set(this.data,”key”,value')

mounted () {  this.$set(this.student,"age", 24)}

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

例如:

const app = new Vue({  data: {    a: 1  }  // render: h => h(Suduko)}).$mount('#app1')Vue.set(app.data, 'b', 2)

Vue.set()和this.$set()的区别是什么

只可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性,例如

var vm=new Vue({    el:'#test',    data:{        //data中已经存在info根属性        info:{            name:'小明';        }    }});//给info添加一个性别属性Vue.set(vm.info,'sex','男');

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

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

import { set } from '../observer/index'...Vue.set = set...

再来看看this.$set()的源码:

import { set } from '../observer/index'...Vue.prototype.$set = set...

结果我们发现Vue.set()和this.$set()这两个api的实现原理基本一模一样,都是使用了set函数。set函数是从 ../observer/index 文件中导出的,区别在于Vue.set()是将set函数绑定在Vue构造函数上,this.$set()是将set函数绑定在Vue原型上。

function set (target: Array<any> | Object, key: any, val: any): any {  if (process.env.node_ENV !== 'production' &&    (isUndef(target) || isPrimitive(target))  ) {    warn(`Cannot set Reactive property on undefined, null, or primitive value: ${(target: any)}`)  }  if (Array.isArray(target) && isValidArrayIndex(key)) {    target.length = Math.max(target.length, key)    target.splice(key, 1, val)    return val  }  if (key in target && !(key in Object.prototype)) {    target[key] = val    return val  }  const ob = (target: any).__ob__  if (target._isVue || (ob && ob.vmCount)) {    process.env.NODE_ENV !== 'production' && warn(      'Avoid adding reactive properties to a Vue instance or its root $data ' +      'at runtime - declare it upfront in the data option.'    )    return val  }  if (!ob) {    target[key] = val    return val  }  defineReactive(ob.value, key, val)  ob.dep.notify()  return val}

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

Vue.set()和this.$set()的区别是什么

看完上述内容,你们掌握Vue.set()和this.$set()的区别是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Vue.set()和this.$set()的区别是什么

本文链接: https://lsjlt.com/news/278867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue.set()和this.$set()的区别是什么
    Vue.set()和this.$set()的区别是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。data () {  return&...
    99+
    2023-06-15
  • Vue.set()和this.$set()使用和区别
    在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去; 当我们去看vue文档的时候,会发现有这么一句话:如果在...
    99+
    2024-04-02
  • Vue中的Vue.set和this.$set怎么使用
    这篇文章主要介绍“Vue中的Vue.set和this.$set怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中的Vue.set和this.$set怎么使用”文章能帮助大家解决问题。一、...
    99+
    2023-06-29
  • ssl和set的区别是什么
    ssl和set的区别:ssl是基于传输层的协议,而set则是基于应用层的协议。ssl在建立安全通道之后,会将有所传输的信息都加密,而set会有选择地加密一部分敏感信息。ssl缺乏一套完整的认证体系,不能提供完备的防抵赖功能,因此set的安全...
    99+
    2024-04-02
  • Vuex中this.$store.commit()和this.$store.dispatch()区别是什么
    这篇文章主要讲解了“Vuex中this.$store.commit()和this.$store.dispatch()区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vuex中this...
    99+
    2023-06-29
  • java中this和super的区别是什么
    java中this和super的区别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、We...
    99+
    2023-06-14
  • Java中的this和super区别是什么
    这篇文章主要介绍“Java中的this和super区别是什么”,在日常操作中,相信很多人在Java中的this和super区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的this和supe...
    99+
    2023-06-25
  • php中get和set的区别是什么
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php中get和set的区别是什么一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义...
    99+
    2014-11-04
    PHP
  • java中set和list的区别是什么?
    Java中的集合共包含三大类,它们分别是Set(集),List(列表)以及Map(映射)。它们都处在java.util中并且都为接口。它们各自都有各自的实现类。下面给大家介绍一下set和list的区别,希望对大家有所帮助。java中set和...
    99+
    2020-08-03
    java入门 java set list
  • redis中set和zset的区别是什么
    Redis中的set和zset是两种不同的数据结构,它们主要的区别在于存储方式和功能特性。 Set(集合): Set是Redi...
    99+
    2024-03-07
    redis
  • jQuery中this与$(this)的区别是什么
    本篇内容主要讲解“jQuery中this与$(this)的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jQuery中this与$(this)的区别是...
    99+
    2024-04-02
  • synchronized加锁this和class的区别是什么
    本篇内容介绍了“synchronized加锁this和class的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!synchroni...
    99+
    2023-06-21
  • cmd批处理中set /a和set /p的区别是什么
    这篇文章将为大家详细讲解有关cmd批处理中set /a和set /p的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 SET 命令中添加了两个新命令行开关:SET /A expressionS...
    99+
    2023-06-08
  • SSL和SET安全协议的区别是什么
    SSL和SET安全协议的区别是:SSL有利于商家而不利于客户而SET对消费者与商家同样有利。具体区别如下:SSL叫安全套接层协议,SSL是国际上最早用的网络安全协议,目前SSL已经成为了工业的标准,但它的基点是商家对客户信息保密的承诺,所以...
    99+
    2024-04-02
  • js中Map和Set的用法及区别是什么
    今天小编给大家分享一下js中Map和Set的用法及区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先了解一下 Ma...
    99+
    2023-06-29
  • java中super与this的区别是什么
    java中super与this的区别:super是当前对象里面的父对象的引用,而this指的是当前对象的引用。super调用基类中的某一个构造函数,而this调用的是本类中另一种形成的构造函数。super是用来访问直接父类中被隐藏的父类中成...
    99+
    2024-04-02
  • java中this和super有什么区别
    这篇文章将为大家详细讲解有关java中this和super有什么区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,...
    99+
    2023-06-14
  • java中super和this有什么区别
    在Java中,super和this是两个关键字,用于引用父类和当前类的实例。1. super关键字:- super关键字用于引用父类...
    99+
    2023-08-11
    java
  • JS构造函数中this和return的区别是什么
    本篇文章给大家分享的是有关JS构造函数中this和return的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。先看一段代码,func...
    99+
    2024-04-02
  • Redis中的Set类型和List有什么区别
    数据结构: Set类型是无序且不重复的数据集合,类似于集合。 List类型是有序且可重复的数据集合,类似于数组。 元素的唯...
    99+
    2024-04-09
    Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作