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实现广告栏上下滚动效果
Nov 26 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
vue 递归组件的简单使用示例
Jan 14 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
el-table-column 内容不自动换行的解决方法
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
上海无线电三厂简史修改版
2021/03/01 无线电
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
python 获取et和excel的版本号
2009/04/09 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
Python3最长回文子串算法示例
2019/03/04 Python
详解python中各种文件打开模式
2020/01/19 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
What is EJB
2016/07/22 面试题
银行个人求职自荐信范文
2013/12/16 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
报到证办理个人委托书
2014/10/06 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
2015年库房工作总结
2015/04/30 职场文书
python requests模块的使用示例
2021/04/07 Python
详细分析PHP7与PHP5区别
2021/06/26 PHP