vue中 this.$set的使用详解


Posted in Vue.js onNovember 17, 2021

vue中 this.$set的使用

背景:在我写前端项目的时候,后端给我们的一个json对象,并且我已经渲染在页面上了。但是由于我自己的需求,想往返回的对象里面添加一个字段,于是我用push一个字段进去,添加是添加进去了,但是页面渲染却没有变化。后来才意识到不是响应式的。如果我们要让这个新字段是响应式的,就要使用到this.$set来注入数据

当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。

使用

this.$set( target, key, value)

target:表示数据源,即是你要操作的数组或者对象

key:要操作的的字段

value:更改的数据

来个小案例:

给一个对象添加一个年龄属性并且让它可以响应式的进行改变

vue中 this.$set的使用详解

<template>
  <div class="text">
      <p>{{list}}</p>
      <button @click="add">age++</button>
  </div>
</template>
<script>
export default {
    data(){
        return {
            list:{ name: "张三"}
        }
    },
    methods: {
        add(){
            if(!this.list.age){ // 如果没有age属性就给它添加一个age属性
                this.list.age=18
            }else{
                this.list.age++
            }
            console.log(this.list)
        }
    }
}
</script>

当我们没有使用this.$set去添加对象属性的时候,效果:

数据确实已经添加进去了,但是页面并没有响应式的渲染age属性。

vue中 this.$set的使用详解

当我们使用this.$set(this.list,‘age',18)去添加一个属性之后。效果:

vue中 this.$set的使用详解

我们能看见添加的数据是响应式的。

为什么能够响应式?

仔细观察一下,使用了this.$set 多了get age和set age方法,这正是能够响应式的原因

vue中 this.$set的使用详解

分析

Vue的响应式原理为 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 能够追踪依赖,在 property 被访问和修改时通知变更。这里需要注意的是不同浏览器在控制台打印数据对象时对 getter/setter 的格式化并不同,下图来自官方文档。

vue中 this.$set的使用详解

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Vue.js 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
vue自定义右键菜单之全局实现
Apr 09 Vue.js
如何用vue实现网页截图你知道吗
Vue3中的Refs和Ref详情
Nov 11 #Vue.js
详细聊聊vue中组件的props属性
一定要知道的 25 个 Vue 技巧
简单聊聊Vue中的计算属性和属性侦听
Oct 05 #Vue.js
SSM VUE Axios详解
vue使用Google Recaptcha验证的实现示例
You might like
php学习之变量的使用
2011/05/29 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
Laravel下生成验证码的类
2017/11/15 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JS中表单的使用小结
2014/01/11 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python 读写文件的操作代码
2018/09/20 Python
python读取文本中的坐标方法
2018/10/14 Python
捷克时尚网上商店:OTTO
2018/03/15 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
一些PHP的面试题
2015/05/06 面试题
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
车间操作工岗位职责
2013/12/19 职场文书
初中校园之声广播稿
2014/01/15 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
小学数学国培感言
2014/03/10 职场文书
文明礼仪倡议书
2015/04/28 职场文书
2015年科普工作总结
2015/07/23 职场文书
队名及霸气口号大全
2015/12/25 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL