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 21 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP注释实例技巧
2008/10/03 PHP
令PHP初学者头疼十四条问题大总结
2008/11/12 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python机器学习之神经网络(一)
2017/12/20 Python
python删除过期log文件操作实例解析
2018/01/31 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
python 实现控制鼠标键盘
2020/11/27 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
人事部经理岗位职责
2014/03/07 职场文书
爱牙日活动总结
2014/08/29 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
《花钟》教学反思
2016/02/17 职场文书
七年级语文教学反思
2016/03/03 职场文书
SQL基础的查询语句
2021/11/11 MySQL
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js