JS学习笔记——AngularJS 1.x双向数据绑定机制
来源:互联网 发布:p2p网络正在连接 编辑:程序博客网 时间:2024/05/17 23:59
0.前言
AngularJS和vueJS是前端比较热门的两个框架,AngularJS 1.x是我第一个接触的框架,双向绑定是其最大的特点,我们从原生JS的角度看看,这个双向数据绑定是如何实现的。点这里看vueJS的双向绑定原理。
1.简单的双向绑定实现
AngularJS的双向绑定基于脏检测(dirty checking)
。所谓的dirty checking就是对比新旧两个值,如果有变化(形象点说,就是这个值脏了),就更新。AngularJS注册了以下几个事件,当这些事件发生后,就会开始”脏检测”。”脏检测”的核心函数是$digest()
。
- DOM事件(Click, Keyup)
- XHR响应
- 浏览器Location变化
- Timer事件(
setTimeout()
和setInterval()
) - 手动执行
$digest()
或$apply()
model->view:$scope
下的变量出现变化,执行DOM更新。
view->model:监听DOM事件,在事件处理程序中改变$scope下的变量。
下面以AngularJS中的ng-click
和ng-bind
两个指令为例子,说说如何实现双向绑定。
<div> <form> <input type="text" ng-bind="count" /> <button type="button" ng-click="increment" >increment</button> </form> <div ng-bind="count"> </div></div>
//构造函数function Scope(){ this.$$watchers = [];//需要绑定的变量列表}Scope.prototype.$watch = function(){//往$$watchers里面加需要绑定的变量}Scope.prototype.$digest = function(){//脏检测//循环检测$$watchers里的所有数据,对比是否变化:如果没有变化,再循环一次确认是否变化,直到连续两次不变(最多循环10次);如果发生变化,则更新DOM}window.load = function(){ var $scope = new Scope(); for(var key in $scope) { //把$scope中的变量添加到$$watchers列表中 } //处理带有ng-click和ng-bind指令的元素 //V->M:给这两个元素绑定事件处理程序,在程序中修改model //M->V:因为修改了model,然后马上调用$scope.$digest()}
由于$digest需要循环检测绑定的变量,因此AngularJS推荐一个页面绑定的view最好不要超过2000个。
【Reference】
1. 双向绑定的简单实现——基于“脏检测” https://zhuanlan.zhihu.com/p/24990192
0 0
- JS学习笔记——AngularJS 1.x双向数据绑定机制
- JavaScript框架之AngularJS学习——双向数据绑定
- 双向数据绑定—AngularJS的基本原理学习
- AngularJs——双向数据绑定示例
- AngularJS(2)——AngularJS数据双向绑定
- 双向数据绑定---AngularJS的基本原理学习
- 双向数据绑定---AngularJS的基本原理学习
- 双向数据绑定---AngularJS的基本原理学习
- AngularJS双向数据绑定
- AngularJs学习笔记[01]——数据绑定
- AngularJS数据双向绑定揭秘
- AngularJS 数据双向绑定揭秘
- AngularJS的双向数据绑定
- AngularJS 数据双向绑定揭秘
- AngularJS数据的双向绑定
- 【AngularJs】Angular双向数据绑定
- angularjs双向数据绑定原理
- angularJs单向/双向数据绑定
- 怎样的数据报表才能将公司全部业务数据整合在一起
- vue + vue-touch 来实现移动端左右导航效果(有点像京东移动站导航)
- 跟我学JavaScript--字符串
- WebView与Javascript交互
- 并查集练习1:HDOJ1213
- JS学习笔记——AngularJS 1.x双向数据绑定机制
- sokcet链接详解--来自简书
- $.ajax
- 进程与线程
- SVN服务器的本地搭建和使用
- 使用XUL开发跨平台桌面应用
- mysql查看是否使用索引
- 操作符的重载和模板的使用
- 375.克隆二叉树