vue中this.$set的使用是怎样,能解决什么问题
Admin 2022-07-07 群英技术资讯 702 次浏览
背景:在我写前端项目的时候,后端给我们的一个json对象,并且我已经渲染在页面上了。但是由于我自己的需求,想往返回的对象里面添加一个字段,于是我用push一个字段进去,添加是添加进去了,但是页面渲染却没有变化。后来才意识到不是响应式的。如果我们要让这个新字段是响应式的,就要使用到this.$set来注入数据
当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。
this.$set( target, key, value)
target
:表示数据源,即是你要操作的数组或者对象
key
:要操作的的字段
value
:更改的数据
来个小案例:
给一个对象添加一个年龄属性并且让它可以响应式的进行改变
<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属性。
当我们使用this.$set(this.list,‘age',18)
去添加一个属性之后。效果:
我们能看见添加的数据是响应式的。
仔细观察一下,使用了this.$set 多了get age和set age方法,这正是能够响应式的原因
Vue的响应式原理为 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 能够追踪依赖,在 property 被访问和修改时通知变更。这里需要注意的是不同浏览器在控制台打印数据对象时对 getter/setter 的格式化并不同,下图来自官方文档。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文主要给大家分享JS内存空间的相关内容,给大家介绍了栈与堆、变量对象与基础数据类型、引用数据类型与堆内存和内存空间管理等内容,对帮助大家学习和加深JS内存空间的知识有一定的帮助,接下来我们一起来看看吧。
JavaScript中关系运算符有几种?JavaScript关系运算符有==、===、!=、!==、<、>等等,这些符号都表示什么意思呢?用法和使用注意事项是什么?这篇文章小编就给大家来简单的介绍一下,有需要的朋友也可以参考,接下来就跟随小编一起了解看看吧。。
用JS怎样做鼠标经过表格变色的效果?也就是鼠标经过表格的某行时,这行变色显示的效果,这样的好处的就是一目了然看到所选的信息,小编觉得比较有用,因此分享给大家做个参考,感兴趣的朋友就继续往下看吧。
Structs是RUST中比较常见的自定义类型之一,又可以分为StructStruct,TupleStruct,UnitStruct三个类型,结合泛型、Trait限定、属性、可见性可以衍生出很丰富的类型。结构体1.定义pub struct User{ user_id : u32, user_name: St
目录打包后相对路径的引用解决办法解决JS、CSS等资源解决图片的引用问题vue cli打包相对路径遇到的坑打包后相对路径的引用vue打包部署后,访问是需要加上项目名这时候访问是使用绝对路径就会处问题了。解决办法把引用路径改为相对路径解决JS、CSS等资源打开build文件夹下的webpack.prod.conf.js,
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008