Vue2(四):Vue监测数据的原理

一、先来看一个问题

添加一个按钮点击更新马冬梅的信息:

<button @click="gengxin">点击更新马冬梅的信息</button>
methods:{gengxin(){this.person[1].name='马老师',this.person[1].age=50,this.person[1].sex='男'}}

下面这种方式就不能奏效,但是在控制台查看person[1]姓名年龄啥的都是更改之后的。如果先点击按钮在点击vue后台可以看到信息更改页面却不更改,先点击vue后台就vue也没改页面也没改,这是为啥呢?

 this.person[1]={id:'002',name:'马老师',age:'50',sex:'男'}

二、Vue监视对象改变的原理

我们写的data是要传入的数据,传入到vm._data,这两个其实不是一摸一样的,打开控制台可以看到vm._data里面还有一堆东西,就是因为data在传入给vm._data之前,还要进行一些处理。

加工一下就能做响应式了(数据变了页面也跟着变),vm._data里面还有name.get/address.get和name.set等等函数

我们用原生js写也可以大概模拟一下name和address的getter和setter但是vue做的事情要更多,比如直接输入vue.name就可以查看,js还要vue._data.name

而且如果data里面数据套娃的话vue是自动递归嵌套有getter和setter的,js就没有了,vue连嵌套的数组也能给你挖出来配套getter和setter。

三、Vue监测对象中的数据

1.Vue.set()

实现后添加的数据也能有响应式的功能调用Vue给的API:

Vue.set(vm.student,'sex','男');

vm.$set(vm.student,'sex','男');

实现点击按钮添加性别

<div id="root"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2><hr/><button @click="addSex">点我添加性别</button><h2>学生姓名:{{student.name}}</h2><h2 v-if="student.sex">学生性别:{{student.sex}}</h2><!-- 判断一下有没有性别,有就展示没有就隐藏 --><h2>学生真实年龄:{{student.age.rAge}},对外年龄:{{student.age.lAge}}</h2><h2><ul><li v-for="(f,index) in student.friends" :key="index">{{f.name}}--{{f.age}}</li></ul></h2></div><script type="text/javascript">const vm=new Vue({el:'#root',data:{name:'尚硅谷',address:'北京',student:{name:'tom',age:{rAge:40,lAge:18},friends:[{name:'jerry',age:35}]}},methods: {addSex(){Vue.set(this.student,'sex','男')}},})

set的局限性:最开始我们在student里面没有加sex但是盒子上面引用了没有报错,是因为a.b,只要data里有a就不会报错,如果我们再想添加一个校长是不可以给data里面追加属性的,第一个参数不可以是data或者vm。

四、Vue监测数组中的数据

数组中的数据不能靠setter和getter取得和改变数据,在Vue修改数组中的某个元素实现响应式的方法:

1.使用这些API:

push:在最后一个位置添加元素

pop:删除最后一个元素

shift:删除第一个

unshift:往前边加一个

splice:在指定位置插入一个元素

sort:分类

reverse:反转这个数组

filter不算,因为它都不能改变原数组,可以筛选完之后再赋值到之前的数组

所以我们就知道一当中的问题是为什么了,我们对数组的索引值直接去赋值肯定不行

vue当中的数组调用push方法和原始的数组调用push不一样,它是先像原始数组那样调,然后去重新解析模版,生成虚拟dom等等

2.Vue.set() 或 vm.$set()

Vue.set(vm.student.hobby,1,'跳舞')

五、综合大练习

 <div id="root"><hr/><h1>学生信息</h1><button @click="student.age++">年龄+1</button><button @click="addSex">添加性别属性,默认值为男</button><button @click="addFriend">在列表首页添加一个朋友</button><button @click="xiugai">修改第一个朋友的名字为张三</button><button @click="addHobby">添加一个爱好</button><button @click="xiugaiaihao">修改第一个爱好为开车</button><h2>学生姓名:{{student.name}}</h2><h2 v-if="student.sex">学生性别:{{student.sex}}</h2><h2>学生真实年龄:{{student.age}}</h2><h2><ul>朋友<li v-for="(f,index) in student.friends" :key="index">{{f.name}}--{{f.age}}</li></ul><ul>爱好<li v-for="(h,index) in student.hobby" :key="index">{{h}}</li></ul></h2></div><script type="text/javascript">const vm=new Vue({el:'#root',data:{student:{name:'tom',age:18,hobby:['抽烟','喝酒','打麻将'],friends:[{name:'jerry',age:35},{name:'tony',age:40}]}},methods: {addSex(){Vue.set(this.student,'sex','男')},addFriend(){this.student.friends.unshift({name:'tt',age:18})},xiugai(){//this.student.friends[0].name.splice(0,1,'张三')this.student.friends[0].name='张三'},addHobby(){this.student.hobby.unshift('唱歌')},xiugaiaihao(){this.student.hobby.splice(0,1,'开车')}},})</script>

我做的时候修改第一个朋友的名字为张三的出了点问题,我光记着不能直接赋值了,但是像这种给数组下的某一个去赋值是可以的,不可以的是不能数组那一条直接赋值frined[0]={,,}这种

说的是0这一项的setter 和getter没有,0本身是对象,下面的name是一个属性,有属性就有setter 和getter。

不能通过数组的索引值直接赋值!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】-css的详解

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

信号(Linux)

信号 前言1. 引入2. 概念3. 初步认识ctrlc信号4. 硬件中断 一、信号的产生1. 键盘组合键2. kill命令3. 系统调用①kill②raise③ abort 4. 异常①异常产生信号②原理 5. 软件条件6. 小结 二、信号的保存1. 引入2. 原理3. 接口①信号集——sigset_t②sigprocmask③sigpending④使…

spring注解驱动系列--AOP探究一

一、AOP--动态代理 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 二、使用栗子 一、导入aop模块 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4…

虚拟机开机字体变大,进入系统后字体模糊

问题 虚拟机开机字体变大&#xff0c;进入系统后字体模糊。 原因 虚拟机配置问题。 解决办法 修改配置为如下:

算法2贪心

1&#xff0c;贪心 1&#xff09;排队打水 #include<bits/stdc.h> using namespace std; const int N1002; int a[N]; int m,n,x0;//n表示人数&#xff0c;m表示水龙头的个数&#xff0c;x表示总时间数 int main(){ cin>>n>>m; for(int i1;i<n;i) {cin…

资深老鸟经验,性能测试-性能指标分析总结,一篇策底概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试指标 1、…

CUDA国内有哪些可以替代吗?

在国内&#xff0c;CUDA作为NVIDIA推出的并行计算平台和API模型&#xff0c;在深度学习、图像处理、科学计算等领域具有广泛的应用和影响力。然而&#xff0c;随着国内技术的发展和对自主可控的需求增加&#xff0c;一些替代CUDA的方案也逐渐崭露头角。以下是一些国内可以替代C…

leetcode代码记录(不同路径

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在…

【 React 】React 中的setState执行机制

1. 是什么 —个组件的显示形态可以由数据状态和外部参数所决定&#xff0c;而数据状态就是state 当需要修改里面的值的状态需要通过调用setState来改变&#xff0c;从而达到更新组件内部数据的作用如下例子 import React, { Component } from react export default class App…

Python实现24点游戏

24点游戏是一种数学益智游戏&#xff0c;它的目标是通过使用加法、减法、乘法和除法这四种基本算术运算&#xff0c;使得四个数字的结果等于24。这个游戏不仅能锻炼玩家的数学计算能力&#xff0c;还能提高逻辑思维和快速反应能力。 游戏规则非常简单&#xff1a; 游戏通常使…

KY113 字母统计

描述&#xff1a; 输入一行字符串&#xff0c;计算其中A-Z大写字母出现的次数 输入描述&#xff1a; 案例可能有多组&#xff0c;每个案例输入为一行字符串。 输出描述&#xff1a; 对每个案例按A-Z的顺序输出其中大写字母出现的次数。 示例1 输入&#xff1a; DFJEIWFNQLEF03…

如何使用ArcGIS Pro生成带计曲线等高线

等高线作为常见的地图要素经常会被使用到&#xff0c;一般情况下生成的等高线是不带计曲线的&#xff0c;在某些情况下我们需要带计曲线的等高线&#xff0c;这里为大家介绍一下ArcGIS Pro生成带计曲线等高线的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数…

Node.js 文件夹遍历技巧:实现高效的文件管理

在 Node.js 开发中&#xff0c;经常需要对文件系统进行操作&#xff0c;包括遍历文件夹以获取文件列表。本文将讨论使用 Node.js 遍历文件夹的几种常用方法&#xff0c;并通过一个实际案例来演示如何实现。 基本概念 在开始之前&#xff0c;让我们了解一些基本的概念&#xff…

关 于 重 燃 学 习 的 热 情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻&#xff0c;我这10天的感觉和在家的感觉发生了翻天覆地的变化&#xff0c;最明显的莫过于学习状态的改变。 倒不是说在家学的不好&#xff0c;而是说在学校&#xff0c;我对学习的整体感觉&#xff0c;以及专注程度&…

Spring事务传播行为总结

事务传播行为介绍 Spring中的7个事务传播行为: ​ 事务行为说明特点PROPAGATION_REQUIRED支持当前事务&#xff0c;假设当前没有事务。就新建一个事务父事务与子事务要么都成功&#xff0c;要么都失败PROPAGATION_SUPPORTS支持当前事务&#xff0c;假设当前没有事务&#xff0…

微信小程序Skyline模式自定义tab组件胶囊与原生胶囊平齐,安卓和ios均自适应

进入下面小程序可以体验效果&#xff1a; 至于原理的话&#xff0c;解释起来毕竟麻烦&#xff0c;各位可以看源码自己分析。其实很简单&#xff0c;就算计算布局。很多网上公布的布局&#xff0c;都不能正常自适应。在下这个是完美可以的 1、WXML <view class"weui…

Kubernetes operator系列:kubebuilder 实战演练 之 开发多版本CronJob

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会在上一篇开发的Cronjob基础上&#xff0c;进行 多版本Operator 开发的实战 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.c…

Peter算法小课堂—最大边最短路

这一片文章把整个图论的知识都用上了,基础芝士如下 Peter算法小课堂—Dijkstra最短路算法-CSDN博客 Peter算法小课堂—拓扑排序与最小生成树-CSDN博客 Peter算法小课堂—贪心与二分-CSDN博客 二话不说,题呢? 罗密欧与朱丽叶 你是罗密欧,要去找朱丽叶。共有n个城市,编…

【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN

目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder&#xff08;1&#xff09;position encoding&#xff08;2&#xff09;multi-head-attention&#xff08;3&#xff09;add&norm 残差链…

python request unittest beautifulreport 接口自动化测试框架

接着上次开发的python request pandas excel 接口自动化测试框架&#xff0c;上次遗留了两个功能需要添加&#xff1a; 1&#xff0c;测试报告的优化 2&#xff0c;参数化和关联的设置&#xff08;如何在excel表里面设置参数化和关联&#xff09; 这次先解决测试报告的优化 …