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项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
详解Vue中的自定义指令
Dec 07 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 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
怎么使 Mysql 数据同步
2006/10/09 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
一个获取第n个元素节点的js函数
2014/09/02 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
JS实现页面打印功能
2017/03/16 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python open()文件处理使用介绍
2014/11/30 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Python安装whl文件过程图解
2020/02/18 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
音乐专业自荐信
2014/02/07 职场文书
公司授权委托书范本
2014/09/18 职场文书
客服专员岗位职责
2015/02/10 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
2015年党小组工作总结
2015/05/26 职场文书
八年级数学教学反思
2016/02/17 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript