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 elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 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
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
php微信公众号开发模式详解
2016/11/28 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 中的 else详解
2016/04/23 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
详解python中的装饰器
2018/07/10 Python
pytorch 数据集图片显示方法
2018/07/26 Python
python三方库之requests的快速上手
2019/03/04 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
python装饰器使用实例详解
2019/12/14 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
党员个人对照检查材料思想汇报
2014/09/16 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers