1、双向数据绑定
<div ng-app="myApp" ng-controller="myCtrl">
名: <input type="text" ng-model="firstName">
姓: <input type="text" ng-model="lastName"><br>
<br>
姓名: {{firstName + " " + lastName}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.firstName= "John";
$scope.lastName= "Doe";
});
</script>
审阅一下上面写的代码,我们使用ng-model指令将内部数据模型对象($scope, 该对象是一个简单的JavaScript对象,其中的属性可以被视图访问,也可以同控制器进行交互)中的name属性绑定到了文本输入字段上。这意味着无论在文本输入字段中输入了什么,都会同步到数据模型中。
AngularJS会记录数据模型所包含的数据在任何特定时间点的值(在上面例子中就是firstname的值和lastname的值),而不是原始值。当AngularJS认为某个值可能发生变化时,它会运行自己的事件循环来检查这个值是否变“脏”。如果该值从上次事件循环运行之后发生了变化,则该值被认为是“脏”值。这也是Angular可以跟踪和响应应用变化的方式。这个过程被称作脏检查(dirty checking)。脏检查是检查数据模型变化的有效手段.
通过上面两段话我们就可以理解什么是双向数据绑定了。双向数据绑定(bi-directional)意味着如果视图改变了某个值,数据模型会通过脏检查观察到这个变化从而改变数据模型的值;而如果数据模型改变了某个值,由于模型的值通过ng-model绑定到了视图中,因此视图也会依据变化重新渲染。
在视图中通过对象的属性而非对象本身来进行引用绑定,是Angular中的最佳实践。(这点需要注意一下,它的意思是我们在上面的代码中不该直接使用firstname和lastname,应该把它们附在一个对象中)