Vue教程7-数据驱动

2. 「vue@2.6.11 源码分析」数据驱动视图(响应式) 1.组件递归渲染 在这里的体现2.nextTick 单独小结补充,涉及到事件循环-渲染等较复杂的问题最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。 阅读详情

数据驱动

Vue的数据驱动便是不同以往的js需要通过事件来触发更新DOM,而是直接当数据发生变化,页面就会随之更新,不需要手动去更新DOM,更加便捷简单,而Vue的数据驱动就要依赖虚拟DOM以及双向数据绑定。

双向数据绑定

Vue的双向数据绑定依赖的是 数据劫持 + 发布者订阅者模式 。

数据劫持——属性的get和set

Vue是通过Object.defineProperty()来实现数据劫持的,当我们打印一个对象的时候,会看到对象的属性都绑定着两个函数:get 和 set 。

Vue页面组件的数据初始化都是在data对象里面进行声明,Vue会遍历data里面所有声明的对象的属性property,之后Vue会利用Object.defineProperty()劫持这些属性然后生成get/set函数 。

顾名思义:get,显示属性值;set,设置属性值。 get/set 对用户来说是不可见的,但是在内部 Vue 能够追踪依赖,在 property 被访问和修改时Object.defineProperty()就会知道。

发布-订阅模式

Object.defineProperty()通过数据劫持可以获知对象属性的更改,但是页面怎么知道数据更改了呢???????????????

JS的页面更新依赖于事件的触发,简单来讲,就是触发事件来通知页面数据更改了,但是Vue不是依靠事件的,依靠的是发布-订阅模式。

举个🌰:
有人来买报纸,但是报纸还没有出来,此时就把watcher登记一下,然后报纸出来之后,一次性通知所有登记了的watcher,这就是Obsever的发布环节。

1、所谓Obsever,便是当属性更改后,需要将更改信息告知Watcher,他的核心就是Object.defineProperty(),因为数据更改会触发set函数,然后set函数就会进行发布操作
2、所谓Watcher,可以收到属性的变化通知并执行相应的函数,从而更新视图

那么了解一下,watcher是怎么知道更新的呢,简单理解,就是 get 函数里面会注册watcher,注册的时候是在一个Dep对象里面进行添加注册watcher;当属性更改,触发set,set 函数通过Dep.notify向所有watcher发送更改通知,watcher就会知道数据更改了。

Obsever{ getter注册 / setter发布 }  <---------> watcher <--------------> View

虚拟DOM

当数据发生改变时,set方法会让调用Dep.notify通知所有订阅者Watcher,订阅者就会调用patch给真实的DOM打补丁,进行页面的真正更新。

对象属性添加、移除响应

这里需要提到,属性在data对象里面进行声明后才会有响应数据操作,但是肯定有一些声明的对象,之后会添加一些property,但是这样watcher就根本不知道更新变化。

Vue是没有办法监测到一个对象里面property添加和移除的,此时就必须要解决上面的问题,Vue提供了一下方法 set:

Vue.set(Object, propertyName, value);
this.$set(Object, propertyName, value);
// 上面两句是一样的

有时我们需要在一个对象里面添加多个属性,我们可以使用Object.assign()。但是注意,通过这种方式添加的属性是没有和watcher关联的,也就是说:不能更新,这个问题也是需要解决的,因此Vue提出了将原对象里面的属性与新属性整合在一起创建一个新的对象。

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

数组响应

创建数组时,你会发现数组里面的数据没有get和set函数,因此数组里面的数据变化也是没有办法响应的,Vue 不能检测以下数组的变动:
当你利用索引直接设置一个数组项时,例如:

vm.items[indexOfItem] = newValue

当你修改数组的长度时,例如:

vm.items.length = newLength

为了解决第一类问题,以下方式都可以实现和 vm.items[indexOfItem] = newValue 相同的效果,同时也将在响应式系统内触发状态更新:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue);

为了解决第二类问题,你可以使用 splice:

vm.items.splice(newLength)

MVVM

MVVM,Model-View-ViewModel,顾名思义,就是Model 模型(连接到服务器的数据库数据)、View 视图(页面展示)、ViewModel视图模型(帮助链接model与view的桥梁)。

正如下面图片所示,ViewModel与View利用的Vue框架实现了双向数据绑定,同时ViewModel和Model主要是进行服务器请求获取服务器端数据,而View用来展示给用户,通过双向数据绑定,无论是View页面操作数据还是Model服务器端数据传递,都可以同步更新到彼此,不需要手动的操作DOM,也就是说,通过MVVM模型以及双向数据绑定,Vue实现了数据驱动,不需要通过事件触发更新页面。

在这里插入图片描述

vue2理论学习(全套教程,包含vuex、路由等) 本文是学习vue2理论的记录笔记,适合于入门学习,包含vue全家桶中的vuex、路由等理论知识。 阅读详情

相关推荐

Vue知识点汇总【持更】

一个前端小白的自学之路,完结之日即成为大白之日。

qq_45605043的博客 6731

Vue底层原理解析:从数据响应到虚拟DOM更新的全过程

本篇博客将深入探讨Vue.js的底层原理,从数据响应到虚拟DOM更新的全过程,并详细解析Vue是如何实现数据的双向绑定和高效地更新DOM的。通过对Vue底层原理的剖析,读者将获得对Vue工作机制的更深入理解,为使用和扩展Vue提供重要的参考。

HTML6549的博客 656

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1060

vue数据驱动

以最简单那的方式去理解vue源码的执行过程

weixin_44922480的博客 1460

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 928

开发基于GDL235KBQ6开发板的IAP升级程序(HEX协议+串口空闲中断 + DMA接收数据)

使用GDL235kB开发板,实现串口iap升级程序的bootloader代码编写,app为led灯闪烁,并完成通信c代码

zhaozijuncc的博客 647

vue之数据驱动

提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

粥可温 806

强化学习Q值迭代的几何视角:从策略区域到快速收敛

在强化学习中,Q值迭代是求解最优策略的核心算法,其理论基础建立在贝尔曼不动点定理之上。该算法通过迭代更新Q函数,使其逐步逼近最优值函数。从几何视角看,整个Q函数空间可被视为一个高维流形,每个Q函数对应流形上的一个点,而贝尔曼最优算子则定义了流形上的变换轨迹。理解这一几何结构,特别是由策略超平面划分出的凸多面体区域,对于分析算法的收敛行为至关重要。在实际工程中,传统Q值迭代可能在高维或稀疏奖励环境下收敛缓慢,甚至陷入策略高原。通过引入策略区域缓存与自适应学习率等几何启发方法,可以更高效地导航策略空间,加速策略

weixin_30444111的博客 319

说说Vue的核心特点(一,数据驱动)

e.js的核心思想之一就是数据驱动。所谓数据驱动就是视图是依靠数据驱动实现的,我们对视图的修改不会直接去操作DOM,而是通过操作数据,Vue帮我们修改视图。相比于传统的jQuery的原生DOM开发,大大简化了代码量,而且用户体验也更加友好,不需要花费大量精力去维护。尤其是在业务量十分复杂的时候,只关心数据的改变,会让代码的逻辑更加清晰,也更易于维护。...

weixin_46886227的博客 953

FC游戏金手指代码大全:亲测可用指南与内存修改原理

在计算机和游戏开发领域,内存修改是一项基础而强大的技术,它通过直接读写程序运行时内存中的数据,改变软件的行为和状态。其核心原理在于理解进程的内存地址空间布局,定位存储关键游戏变量(如生命值、金币数)的特定地址,并注入或锁定目标数值。这项技术的工程价值在于,它不仅能用于游戏辅助,更是软件逆向工程、漏洞分析和调试的重要实践手段。在怀旧游戏和模拟器场景中,内存修改以“金手指”或“作弊码”的形式广泛应用,帮助玩家自定义游戏体验。本文将聚焦FC(红白机)游戏,深入解析Game Genie码和Raw码两种主流金手指格式

weixin_30780649的博客 805

短视频团队架构&工作流程---2025.3.30

1、负责短视频日常内容分发上线,包括视频头图、标题、简介、推荐位及部分内容元数据的日常导入、审核、上线、下线,并提供各品类短视频的内容上线计划表。(20)运营:视频推送后,实时跟进视频数据,定期统计分析数据报表,根据数据表现 找到问题,并发送给各个小组的负责人,对下一期视频内容进行调整。(4)运营:收到成片,设计视频头图、标题、简介、推荐位等,分发到各个平台,统计分析视频的数据,对各个平台的视频进行管理、用户互动等。1、负责影视、戏剧、广告、专题片等的策划、组稿选题、材料收集、内容策划。

超越神明 2155

Vue数据驱动

本文通过拼图游戏案例,讲述了Vue框架的核心特征——数据驱动,及响应式原理。

念旧的博客 1166

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3184

VueJS学习资料大全

参考:http://www.worktle.com/articles/2467/ 文档&社区 Vue.js官方网站(中文):http://cn.vuejs.org/ Vue论坛:http://forum.vuejs.org/ vue-router:http://vuejs.github.io/vue-router/zh-cn/index.html 组件库:ht...

2635

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖)

API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+!

yueyeguzhuo的专栏 271

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Vuejs的数据驱动与组件

数据响应原理: 有一份数据a.b,在一个vue对象的实例化过程中,会给a.b这份数据通过ES5的Object.defineProperty属性添加了一个getter和setter,同时vuejs对模板做编译,解析生成一个指令对象(v-text=“a.b”),每一个指令对象都会关联一个Watcher,当我们的指令对应的表达式a.b做求值的时候,就会触发了它的getter,这里就会把依...

abcde3326的博客 367

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

推荐7款优秀的vue table数据表格组件

数据表格(datatable )组件旨在为Web 应用程序上表示和操作表格数据提供一种简单方便的解决方案。它允许用户以灵活、强大的方式过滤、格式化、分页、编辑、排序、添加和删除其数据。

CamphorBlossom的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Vue2.0全面教程

学习视频地址官方给出的概念:Vue (读音 /vju:/,类似于 view)是一套的前端在使用了 vue 的页面中,vue 会监听数据的变化,从而自动重新渲染页面的结构。示意图如下:​ 在填写表单时,双向数据绑定可以辅助开发者在不操作 DOM 的前提下,自动把用户填写的内容同步到数据源中。示意图如下:​ MVVM 是 vue 实现数据驱动视图和双向数据绑定的核心原理。MVVM 指的是 Model、View 和 ViewModel,它把每个 HTML 页面都拆分成了这三个部分,如图所示:ViewModel 作

... 2680

vue的源码学习之五——7.数据驱动(update)

1. 介绍         版本:2.5.17。         我们使用vue-vli创建基于Runtime+Compiler的vue脚手架。        学习文档:https://ustbhuangyi.github.io/vue-analysis/data-driven/update.html  2. 连接上一节 在上一节中我们提到了在src/core/instance/life...

路在脚下,幸福在手中,莫贪!!!!! 1492

尚硅谷Vue2.0+Vue3.0全套教程

尚硅谷Vue2.0+Vue3.0全套教程,全网最新最强vuejs从入门到精通

前端学习分享 2754

VUE 简明教程

文章目录VUE 简明教程一、Vue 简介二、vue 三种安装方式三、快速开始四、实例选项1、el2、data3、methods五、术语解释1、插值表达式2、指令六、系统指令1、v-text 和 v-html2、v-if 和 v-show3、v-on绑定事件1)基本使用2)修饰符3)事件对象4、v-for1)数组2)对象3)key 属性5、v-bind(动态修改标签属性)1)绑定 id2)绑定class(对象)3)绑定class(数组)4)绑定 style (对象)5)绑定style(数组)6、v-model

weixin_44062380的博客 2035

VUE基础

VUE基础 1、vue是什么? 目前前端有三个非常流行的框架,非别是angularjs,reactjs,vuejs。而这三个当中,vuejs的受欢迎度目前是最高的,而开发vuejs的就是一个中国人尤雨溪。 其它框架的关联 借鉴angular的模板和数据绑定技术 借鉴react的组件化和虚拟DOM技术 基本概念 vue.js的官方文档中说vue是渐进式JavaScript框架。我们来一个一个解释其中的概念。 渐进式 vue全家桶其实是包含很多vue的扩展插件的,比如以下。 vue-cli: vue脚手架

m0_55832273的博客 2344

LobeHub Agent Tracing 实战:基于 `@lobechat/agent-tracing` 的 Agent 执行快照采集、检视与回放调试指南

本文基于 LobeHub 仓库中的 [.agents/skills/agent-tracing/SKILL.md](https://link.gitcode.com/i/4a7c60fefb2f45e296aea4c9ba64052a) 技能文档,系统讲解 `@lobechat/agent-tracing` 这个零配置本地开发工具:它会在开发模式下把每一次 Agent 操作的每一步自动记录为磁盘上

gitblog_00291的博客 1014

视频教程-最新完整VUE前端教程从入门到精通,纯干货企业级项目实战-Vue

最新完整VUE前端教程从入门到精通,纯干货企业级项目实战 10年以上开发经验...

weixin_34138459的博客 1902

vue_t_v7

VUE vue框架的两大核心: 数据驱动和组件化。 第一周:大家需要转变编程思维的习惯:数据驱动(数据的变化会驱动页面发生变化,不用操作DOM) 第二周:大家需要转变编程思维的习惯:组件化 一、前端开发历史 1994年可以看做前端历史的起点(但是没有前端的叫法) 1995年网景推出了JavaScript 1996年微软推出了iframe标签, 实现了异步的局部加载 1999年W3C发布第四代HTML标准,微软推出用于异步数据传输的 ActiveX(ActiveXObject),各大浏览器厂商模仿实现了 XM

wansui33_的博客 2万+

2023 年 7 个适合初学者的 Vue.js 教程

这个精心挑选的列表将帮助 Vue 初学者找到七个很棒的资源来开始学习 Vue。我相信你来这里是为了寻找一些资源来开始学习 Vue.js 框架的奇妙旅程,无论是作为第一个工具还是你熟悉的其他框架的附加工具。不管怎样,你很幸运,因为这就是我们将在这篇文章中介绍的内容。随着现代 Web 应用程序对更多功能、复杂性、可访问性和性能的需求不断增加,开发人员面临着更艰巨的任务,即交付满足现代用户需求的高质量 Web 应用程序。

d586947的博客 380
上一篇: Vue教程6-style的绑定
下一篇: Vue教程8-组件
ruby___ruby
博客等级 码龄9年 2粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值