双向绑定
双向绑定是AngularJS最实用的功能,它节省了大量的代码,使我们专注于数据和视图,不用浪费大量的代码在Dom监听、数据同步上,关于双向更新,可看下图:
数据–gt;视图
这里我们只演示有了数据以后,如何绑定到视图上。
lt;!DOCTYPE htmlgt;
lt;html ng-app="App"gt;
lt;headgt;
lt;script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"gt;lt;/scriptgt;
lt;script type="text/javascript"gt;
var App = angular.module("App", []);
App.controller("ctrl", function ($scope) {
$scope.username='张三'
$scope.changename=function(){
$scope.username='李四';
}
});
lt;/scriptgt;
lt;/headgt;
lt;bodygt;
lt;div ng-controller ="ctrl"gt;
lt;button class='btn btn-primary' ng-click='changename();'gt;
username='李四'
lt;/buttongt;
lt;!--页面加载初期,用户可能会看到绑定的表达式--gt;
lt;divgt;{{username}}lt;/divgt;
lt;!--此绑定不会出现上述情况--gt;
lt;div ng-bind='username'gt;lt;/divgt;
lt;/divgt;
lt;/bodygt;
lt;/htmlgt;
点击按钮之后,div内容变成 李四,效果如图:
视图—gt;数据
上个例子,我们看了数据变化后,视图也会自动变化。那么这个例子则是反过来,视图变化,导致数据也跟着变化,那么数据变化后,我们如何知道呢,这儿我们可以通过另外一个元素将数据再显示出来。
lt;!DOCTYPE htmlgt;
lt;html ng-app="App"gt;
lt;headgt;
lt;script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"gt;lt;/scriptgt;
lt;script type="text/javascript"gt;
var App = angular.module("App", []);
App.controller("ctrl", function ($scope) {
$scope.username='张三'
});
lt;/scriptgt;
lt;/headgt;
lt;bodygt;
lt;div ng-controller ="ctrl"gt;
lt;input type='text' ng-model='username' /gt;
lt;divgt;{{username}}lt;/divgt;
lt;/divgt;
lt;/bodygt;
lt;/htmlgt;
查看效果:

实现机制
angular对常用的dom事件,xhr事件等做了封装, 在里面触发进入angular的digest流程。
在digest流程里面, 会从rootscope开始遍历, 检查所有的watcher。