数据驱动

简介: 数据驱动在Vuejs中,只需要改变数据 model,Vuejs 通过 directives 指令 对 dom 进行封装,当数据发生变化,会通知指令修改对应的dom,通过数据驱动 dom,dom 是数据的一种自然映射。
数据驱动

在Vuejs中,只需要改变数据 model,Vuejs 通过 directives 指令 对 dom 进行封装,当数据发生变化,会通知指令修改对应的dom,通过数据驱动 domdom 是数据的一种自然映射


Vuejs还会对操作进行监听,当我们修改视图 View 的时候,Vuejs监听这些变化,从而改变数据。


这样形成了数据的双向绑定


Vue js 数据响应原理:

以下图为例,在一个Vue对象实例化的过程中,会给 a.b 这份数据,通过 es5 的 defineproperty 添加 getter setter, 通过 vuejs 会对模板做的编译,解析生成一个指令对象。每个指令对象都会关联一个Watcher。

当对指令对应的表达式 a.b 进行求值的时候,就会触发他的getter。我们就会把依赖收集到 Watcher 里面。

当我们再次改变 a.b 的时候,就会触发他的setter,就会通知到对应的 Watcher,然后 Watcher 会对 a.b 进行求值,然后对比新旧值,当发现值改变了,Watcher又会通知到指令,让指令的 Update方法执行。由于指令是对dom的封装,所以他会调用原生 Dom 的方法,去更新视图。

这样我们就完成了数据改变,到数据更新的全过程。


组件化
vuejs另一个核心思想是组件化,组件化的目的是扩展HTML元素,封装可重用的代码

如下图所示,左侧就是我们的页面,可以被拆分成一个个小的区块,每个区块对应一个组件,组件可以嵌套,最终组合形成一个完整的页面。
在Vuejs 中,每个组件都对应一个 viewmodel,最终我们生成右边的 viewmodel 的一个树,它和我们的 dom 树是一一对应的关系。



组件设计原则


1. 页面上每个独立的可视,可交互的区域视为一个组件,比如页面的头部,尾部,还有一些可以复用的区块,都可以抽象成一个组件。

2. 每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护就近维护原则,其实就体现了前端工程化思想,为前端开发提供了很好的分治策略,每个开发者都将很清楚的知道自己开发维护的功能单元,他的代码必然存在于对应的组件目录中。在那个目录下就可以找到功能单元内部所有的业务逻辑,无论样式、js、还是页面结构,都在这里。在vuejs 中可以通过 .vue 文件把组件依赖的模板、js和样式都写在一个文件中,可以说把组件化的就近维护原则发挥到了极致。

3. 页面不过是组件的容器,组件可以嵌套自由组合形成完整的页面。开发过程中,会将页面拆分成一个个组件,进行开发维护。







目录
相关文章
基于Multisim的BJT共射电路的仿真
下面是基于Multisim的BJT共射电路的仿真步骤: 1. 打开Multisim软件,创建新的仿真文件。 2. 在Components栏中选择BJT晶体管,将其拖放到工作区中。 3. 在Components栏中选择电源,将其拖放到工作区中。 4. 在Components栏中选择电阻,将其拖放到工作区中。 5. 连接电源和地线。 6. 连接电阻和BJT晶体管,形成基本的共射电路。 7. 右键单击电源,选择Properties,设置电源电压。 8. 右键单击电阻,选择Properties,设置电阻值。 9. 设置其他仿真参数,如仿真时间、仿真步长等。 10. 运行仿真,观察输出波形和电路性能参数
602 0
|
编解码 物联网
LDPC 码在 3GPP 中的应用 | 带你读《5G-NR信道编码》之十八
本章节带你了解LDPC 码在 3GPP 中的应用。
LDPC 码在 3GPP 中的应用  | 带你读《5G-NR信道编码》之十八
|
存储 安全 关系型数据库
CentOS7 如何离线安装PostgreSQL数据库
如果CentOS所在的服务器限于安全原因,客户并未给我们配置访问外网的权限,那么如何安装PostgreSQL数据库呢?本文将通过具体步骤来详细讲解如何在CentOS7 系统上离线安装PostgreSQL12数据库。
4652 0
CentOS7 如何离线安装PostgreSQL数据库
|
11月前
|
前端开发 JavaScript 开发者
Async 和 Await 是基于 Promise 实现
【10月更文挑战第30天】Async和Await是基于Promise实现的语法糖,它们通过简洁的语法形式,借助Promise的异步处理机制,为JavaScript开发者提供了一种更优雅、更易于理解和维护的异步编程方式。
231 1
|
10月前
|
人工智能 前端开发 项目管理
高效实用的设计协作平台有哪些?5款测评
设计团队常面临沟通不畅、文件版本混乱等问题,严重影响创作效率。推荐几款实用工具帮助解决上述问题。
297 3
高效实用的设计协作平台有哪些?5款测评
|
存储 Linux C语言
【linux进程控制(一)】进程终止--如何干掉一个进程?
【linux进程控制(一)】进程终止--如何干掉一个进程?
|
11月前
|
Web App开发 前端开发 JavaScript
前端开发必备神器大公开,用过的人都哭了:效率翻倍不是梦!
前端开发结合了创意与技术,本文介绍了几个提升开发效率的工具:Visual Studio Code、Webpack、Postman、GitHub 和 Chrome DevTools。这些工具分别在代码编辑、模块打包、API 测试、版本控制和网页调试等方面发挥重要作用,帮助开发者提高工作效率,优化项目管理。
210 4
|
11月前
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
238 0
|
11月前
|
安全 Java 开发者
Java多线程编程中的常见问题与解决方案
本文深入探讨了Java多线程编程中常见的问题,包括线程安全问题、死锁、竞态条件等,并提供了相应的解决策略。文章首先介绍了多线程的基础知识,随后详细分析了每个问题的产生原因和典型场景,最后提出了实用的解决方案,旨在帮助开发者提高多线程程序的稳定性和性能。
|
信息无障碍
BUUCTF [WUSTCTF2020]find_me 1
BUUCTF [WUSTCTF2020]find_me 1
404 0