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——前端生成二维码的示例
Dec 19 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
Vue3实现简易音乐播放器组件
Aug 14 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
JQuery中getJSON的使用方法
2010/12/13 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
vue ssr 指南详读
2018/06/29 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python 上下文管理器使用方法小结
2017/10/10 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python实现textrank关键词提取
2018/06/22 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
新闻传媒系求职信范文
2014/04/19 职场文书
标准版离职证明书
2014/09/12 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
centos8安装MongoDB的详细过程
2021/10/24 MongoDB