vue 双数据绑定原理

Vue的双向数据绑定原理是什么?

答:vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的settergetter,在数据变动时发布消息给订阅者,触发相应的监听回调。

具体步骤:

第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上 settergetter
这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化

第二步:compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图

第三步:Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是:
1、在自身实例化时往属性订阅器(dep)里面添加自己
2、自身必须有一个update()方法
3、待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。

第四步:MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果。

转载于:https://www.cnblogs.com/manban/p/11158304.html

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

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

相关文章

Java lamda表达式快速分组

public class ProductDto {private long month;private String cate;private double count;} 分组 Map<String,List<ProductDto>> categoryMap alllist.getValue().stream().collect(Col lectors.groupingBy(ProductDto::getCate));求和 Double sumCount catego…

这么香的技术还不快点学起来,不吃透都对不起自己

大家应该看过很多分享面试成功的经验&#xff0c;但根据幸存者偏差的理论&#xff0c;也许多看看别人面试失败在哪里&#xff0c;对自己才更有帮助。 最近跟一个朋友聊天&#xff0c;他准备了几个月&#xff0c;刚刚参加完字节跳动面试&#xff0c;第二面结束后&#xff0c;嗯&…

Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

前言 用c#开发的时候&#xff0c;新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数&#xff0c;如Awake,Start, Update, OnDestroy等。 在相应的方法中实现游戏逻辑&#xff0c;引擎会适时调用。 而Lua在这里做为c#的一个外延语言&#xff0c;自然是不受…

这么香的技术还不快点学起来,含BATJM大厂

前言 北京字节跳动科技有限公司成立于2012年3月&#xff0c;是最早将人工智能应用于移动互联网场景的科技企业之一。其独立研发的“今日头条”客户端&#xff0c;开创了一种全新的新闻阅读模式。 我一直很向往这样有创新精神&#xff0c;并做出了巨大成果的大公司&#xff0c…

.net Core把一个list集合里面的所有字段的数值汇总

前言&#xff1a;此随笔仅供自己学习&#xff0c;如有不足还请指出 在很多时候&#xff0c;得到一个list集合&#xff0c;需要把里面的数据汇总&#xff0c;但我又不想写那么多循环&#xff0c;于是去.net core 官方文档找有没有相关方法&#xff0c;很可惜我没有找到&#xff…

openshift for linux

安装openshift 1、下载地址&#xff1a; https://github.com/openshift/origin/releases 3.11下载&#xff1a; https://github.com/openshift/origin/releases/tag/v3.11.0 https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-server-v3.11…

这些Android高级必会知识点你能答出来几个?含BATJM大厂

前言 首先介绍一下自己&#xff0c;计算机水本&#xff0c;考研与我无缘。之前在帝都某公司算法部实习&#xff0c;公司算大公司吧&#xff0c;然而个人爱好偏开发&#xff0c;大二的时候写个一个app&#xff0c;主要是用各种框架。 一、掌握架构师筑基必备技能 二、掌握Andr…

Docker kafka

阅读目录 一、下载镜像二、先启动zookeeper三、启动kafka四、创建一个topic&#xff08;使用代码次步可省略&#xff09;五、kafka设置分区数量六、python代码回到顶部 一、下载镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 回到顶部 二、先启…

这些年Android面试的那些套路,社招面试心得

前言 说不焦虑其实是假的&#xff0c;因为无论是现在还是最近几年&#xff0c;很早就有人察觉Android开发的野蛮生长时代已经过去。过去的优势是市场需要&#xff0c;这个技术少有人有&#xff0c;所以在抢占市场的时候&#xff0c;基本上满足需要就已经可以了。但是现在&…

flask第一章:项目环境搭建

windows环境pycharmpython3 1、命令提示窗口 1&#xff09;创建项目目录&#xff1a;mkdir myblog 2&#xff09;cd myblog 3&#xff09;创建虚拟环境&#xff1a;python -m venv myvenv 4&#xff09;激活虚拟环境&#xff1a;venv\Scripts\activate 5&#xff09;安装flask&…

windows docker 空出C盘 迁移到其他盘

下面是操作方法&#xff1a; 首先关闭docker 关闭所有发行版&#xff1a;wsl --shutdown 将docker-desktop-data导出到D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar&#xff08;注意&#xff0c;原有的docker images不会一起导出&#xff09;wsl --expo…

安卓开发入门到精通!免费Android高级工程师学习资源,系列篇

前言 2017年进大学开始接触Android&#xff0c;从刚开始接触就不断地听到Android市场饱和&#xff0c;工作难找等消息。虽然当时也非常迷茫&#xff0c;不过由于第一次深入接触编程语言&#xff0c;再加上自己的一点兴趣&#xff0c;就一直坚持下来了。 到现在要毕业了&#…

安卓开发基础面试题,9次Android面试经验总结,面试必备

前言 上回承诺过大家&#xff0c;一定会出 HTTP 的系列文章&#xff0c;今天终于整理完成了。作为一个 web 开发&#xff0c;HTTP 几乎是天天要打交道的东西&#xff0c;但我发现大部分人对 HTTP 只是浅尝辄止&#xff0c;对更多的细节及原理就了解不深了&#xff0c;在面试的…

基于TCP的在线聊天程序

在线聊天服务端 import tkinter import tkinter.font as tkFont import socket import threading import time import sys class ServerUI():local127.0.0.1port5505global serverSock;flagFalsedef __init__(self):self.roottkinter.Tk()self.root.title(在线聊天-服务端v1.0)…

Docker安装Confluence

Docker安装Confluence 参考链接: https://my.oschina.net/u/2289161/blog/1648587 https://hub.docker.com/r/cptactionhank/atlassian-confluence/dockerfile https://my.oschina.net/u/2289161/blog/1647061 https://my.oschina.net/u/2289161/blog/838218 https://hub.…

安卓开发基础面试题,Android面试必备的集合源码详解,附小技巧

去年无疑是 Flutter 技术如火如荼发展的一年。 每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂&#xff0c;从超级 App 到独立应用&#xff0c;从纯 Flutter 到混合栈&#xff0c;开发者们在不同的场景下乐此不疲的探…

『算法』读书笔记 1.4算法分析 Part1

Chapter 1 本章结构 1.1Java语法 1.2数据抽象 1.3集合类抽象数据类型&#xff1a;背包 (Bags) 、队列 (Queues) 、栈 (Stacks) 1.4算法分析 1.5连通性问题&#xff0d;Case Study: Union - Find ADT 本节开篇使用了一个ThreeSum程序进行示例&#xff1a; ThreeSum所起到的作用…

JS调用MetaMask调用启动转账

1 、代码必须跑在nginx下&#xff0c;否则没有eth对象。 2、可以下载ganache来单跑个私服&#xff0c;然后安装谷歌metamask浏览器插件来实验 3、账户1:0xFA387e41FA471172cC729167EBD4862aA7020D91 账户2:0x818DF62ff0bE3B28AE8be25e2e848E10138018B7 4、1000000000000000 …

安卓开发工程师面试题!春招我借这份PDF的复习思路,不吃透都对不起自己

写在前面 身边有不少去大厂面试的朋友&#xff0c;其中小金面试字节跳动的经历很有意义&#xff0c;在这里分享给大家。小金是末流211计算机专业大三本科生&#xff0c;前几天面试了字节跳动的广州Android开发实习生。下面是他的面试经历&#xff0c;还有一些他自己的经验。 …

合算的日本料理

巨鹿路和那个茂名路路口的《和味》&#xff0c;有预订的话才98一个人&#xff0c;味道不错&#xff0c;楼上的桃子MM服务狠好&#xff0c;笑容狠甜。那里的东西味道还是狠正宗的&#xff0c;除了一个色拉不对。那里的清酒和梅酒都不错&#xff0c;尤其梅酒。生牛肉虽然没有大渔…