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-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
vue自定义右键菜单之全局实现
Apr 09 Vue.js
Vue OpenLayer 为地图绘制风场效果
Apr 24 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
提取HTML标签
2006/10/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
Python中存取文件的4种不同操作
2018/07/02 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
酒店前厅员工辞职信
2014/01/08 职场文书
初中科学教学反思
2014/01/21 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
信息总监管理职责范本
2014/03/08 职场文书
人大调研汇报材料
2014/08/14 职场文书
老龄工作先进事迹
2014/08/15 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
珍惜资源的建议书
2014/08/26 职场文书
三好生演讲稿
2014/09/12 职场文书
学校开学标语
2014/10/06 职场文书
2015年党性分析材料
2014/12/19 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS