双向绑定是AngularJS最实用的功能,它节省了大量的代码,使咱们专一于数据和视图,不用浪费大量的代码在Dom监听、数据同步上,关于双向更新,可看下图:javascript
下面,咱们经过代码来实现。先不要纠结其中不明白的地方,先来体验下数据绑定的效果。html
这里咱们只演示有了数据之后,如何绑定到视图上。java
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.username='张三' $scope.changename=function(){ $scope.username='李四'; } }); </script> </head> <body> <div ng-controller ="ctrl"> <button class='btn btn-primary' ng-click='changename();'> username='李四' </button> <!--页面加载初期,用户可能会看到绑定的表达式--> <div>{{username}}</div> <!--此绑定不会出现上述状况--> <div ng-bind='username'></div> </div> </body> </html>点击按钮以后,div内容变成 李四,效果如图:git
点击这里查看效果。github
上个例子,咱们看了数据变化后,视图也会自动变化。那么这个例子则是反过来,视图变化,致使数据也跟着变化,那么数据变化后,咱们如何知道呢,这儿咱们能够经过另一个元素将数据再显示出来。app
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.username='张三' }); </script> </head> <body> <div ng-controller ="ctrl"> <input type='text' ng-model='username' /> <div>{{username}}</div> </div> </body> </html>查看效果:dom
点击这里查看效果。spa
angular对经常使用的dom事件,xhr事件等作了封装, 在里面触发进入angular的digest流程。
在digest流程里面, 会从rootscope开始遍历, 检查全部的watcher。3d具体请参考https://github.com/xufei/Make-Your-Own-AngularJS/blob/master/01.md文章吧。双向绑定