Vue知识点总结(21)——对象的变更检测(超级详细)

news/2024/7/9 23:39:44 标签: vue, js, html, 前端

html" title=vue>vue官方文档中的深入响应式原理中有提到过,对于检测变化的一些注意事项

由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。

这句话是啥意思呢?
我们先看一个小例子。

<div id="app">
    <h3>{{user.name}},{{user.age}}</h3>
    <button @click='handlerAdd'>添加属性</button>
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            user:{}
        },
        created () {
            this.user.name = 'Ray'
        },
        methods: {
            handlerAdd(){
                console.log('触发点击事件');
                this.user.age = 20;            }
        }
    });
</script>

首先我们在data中写了一个空的user对象created钩子函数中,我们在user对象中添加了一个name属性,赋值为Ray
然后我们写了一个按钮,重点的就是这个按钮的操作,我们想在这个按钮里继续添加一个age属性,赋值为20
按照正常的逻辑来说,这应该是没问题的。
下面我们看看页面的渲染情况。
在这里插入图片描述
在控制台输出了语句,说明我们触发了点击事件,但是age的值并没有被渲染到页面上

这是咋回事呢,这就是html" title=vue>vue官方提示的注意事项。

由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。

下面我们看一下如何解决这个问题?
html" title=vue>vue提供了一个API,Vue.$set(object,key,value),用于避免这种问题的发生。

<div id="app">
    <h3>{{user.name}},{{user.age}}</h3>
    <button @click='handlerAdd'>添加属性</button>
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            user:{}
        },
        created () {
            this.user.name = 'Ray'
        },
        methods: {
            handlerAdd(){
                console.log('触发点击事件');
                this.$set(this.user,'age',20);       }
        }
    });
</script>

我们使用html" title=vue>vue提供的这个API之后,再看页面的渲染结果。
在这里插入图片描述
果然,可以正常地显示age属性的内容。

但是上面这种API,Vue.$set(object,key,value)一次只能添加一个属性。如果我们想一下添加多组属性呢?

html" title=vue>vue也为我们提供了对策。

<div id="app">
    <h3>{{user.name}},{{user.age}}</h3>
    <button @click='handlerAdd'>添加属性</button>
</div>
<script>
    new Vue({
        el:'#app',
        data:{
            user:{}
        },
        created () {
            this.user.name = 'Ray'
        },
        methods: {
            handlerAdd(){
                console.log('触发点击事件');
                 this.user = Object.assign({},this.user,{
                      age:20,
                      phone:18331092918
                 })   
            }
        }
    });
</script>

Object.assign({}, this.someObject, { key1: value1, key2: value2 })

下面我们看一下页面的展示效果:
在这里插入图片描述

果然,非常的nice。

今天这个知识点还是比较重要的,无论是面试还是我们日常的开发,都可能会踩这个坑。


有微信小程序课设、毕设需求联系个人QQ:505417246

关注下面微信公众号,可以领取微信小程序、Vue、TypeScript、前端、uni-app、全栈、Nodehtml" title=js>js、Python等实战学习资料
最新最全的前端知识总结和项目源码都会第一时间发布到微信公众号,请大家多多关注,谢谢!

在这里插入图片描述


http://www.niftyadmin.cn/n/1576571.html

相关文章

《Cisco ASA设备使用指南(第3版)》一2.15 Cisco ASA下一代防火墙服务(前身为Cisco ASA CX)...

本节书摘来自异步社区《Cisco ASA设备使用指南&#xff08;第3版&#xff09;》一书中的第2章&#xff0c;第2.15节&#xff0c;作者【【美】Jazib Frahim&#xff08;压茨布 弗拉海&#xff09; , Omar Santos&#xff08;奥马尔 桑托斯&#xff09; , Andrew Ossipov&#xf…

Vue知识点总结(22)——mixin混入技术(超级详细)

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01; 在web前端的发展中&#xff0c;组件化、模块化的思想一直在贯彻目前的技术发展。 组件的一大重要作用就是可复用&#xff0c;我封装完组件之后&#xff0c…

《SolidWorks 2014中文版机械设计从入门到精通》——导读

**前言**SolidWorks公司是一家专业从事三维机械设计、工程分析、产品数据管理软件研发和销售的国际性公司。其产品SolidWorks是世界上第一套基于Windows系统开发的三维CAD软件&#xff0c;它有一套完整的3D MCAD产品设计解决方案&#xff0c;即在一个软件包中为产品设计团队提供…

Vue知识点总结(23)——Vue-Cli3脚手架基本配置和快速原型开发(超级详细)

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01; 在这之前我们已经把vue的基础部分已经基本讲述完毕。 我们之前写vue组件的流程都是 Vue.component("组件名", {}); new Vue({components:组件名…

Vue知识点总结(24)——使用VueCli创建一个项目(超级详细)

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01; 在上一篇文章我们已经简单了解了一下传统创建组件的缺点和使用单文件组件的好处&#xff0c;并且进行了快速的原型开发。 今天我们来试着使用VueCli3完整的…

ROS机器人程序设计(原书第2版)3.3 检测系统状态

3.3 检测系统状态 当系统运行时&#xff0c;可能有数个节点和数十个主题在节点中发布消息。同时&#xff0c;有些节点可能也会提供行为或服务。对于大型系统来说&#xff0c;通过提供一些 工具让我们看到系统在给定时间的运行状态是非常重要的。ROS对此提供了一些基本但非常强…

你好,谈谈你对前端路由的理解

前言 好了不装了&#xff0c;今天我就化身性感面试官在线问大家一个问题&#xff0c;“谈谈你对前端路由的理解”。看到这个问题&#xff0c;那回答可多了去了。但是换位思考一下&#xff0c;你问候选人这个问题的时候&#xff0c;你想要得到什么答案&#xff1f;以我个人拙见…

《大数据架构和算法实现之路:电商系统的技术实战》——1.5 相关软件:R和Mahout...

本节书摘来自华章计算机《大数据架构和算法实现之路&#xff1a;电商系统的技术实战》一书中的第1章&#xff0c;第1.5节&#xff0c;作者 黄 申&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.5 相关软件&#xff1a;R和Mahout 了解了机器学习和分类…