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 相关文章推荐
vue $router和$route的区别详解
Dec 02 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
解读Vue组件注册方式
May 15 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
Vue+TypeScript中处理computed方式
Apr 02 Vue.js
vue的项目如何打包上线
Apr 13 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
跟老齐学Python之重回函数
2014/10/10 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python列表的常用操作方法小结
2016/05/21 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
用Python shell简化开发
2018/08/08 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
详解python的变量缓存机制
2021/01/24 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
Ajax的工作原理
2015/12/04 面试题
安全标准化汇报材料
2014/02/03 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
医院党员公开承诺书
2014/08/30 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
springcloud整合seata
2022/05/20 Java/Android