中运行。
通过script标签载入angular.js脚本时,angular监听了DOMContentLoaded事件,当浏览器将整个HTML页面载入完毕后将会执行该angular.js脚本,angular.js脚本运行后将会寻找含有ng-app指令的HTML标签,该标签即定义了AngularJS应用的作用域。
输入框元素绑定到一个叫yourname的模型中。
双大括号标记将yourname模型添加到页面中。双大括号{{}}实现绑定的效果,告诉AngularJS需要运算其中的表达式并将结果插入DOM中。AngularJS表达式是一种类似于java script的代码片段,AngularJS表达式仅在AngularJS的作用域中运行,而不是在整个DOM中运行。
现在你试着在输入框中键入您的名称,您键入的名称将立即更新显示在页面中。 这就是AngularJS双向数据绑定的概念。 输入框的任何更改会立即反映到模型变量(一个方向),模型变量的任何更改都会立即反映到页面中(另一方向)。
我们再来看一个稍微复杂点的例子:
?
? ...
? <script src="lib/angular/angular.js">
? <script>
function PhoneListCtrl($scope) {
? $scope.phones = [
? ? {"name": "Nexus S","snippet": "Fast just got faster with Nexus S."},
? ? {"name": "Motorola XOOM? with Wi-Fi","snippet": "The Next, Next Generation tablet."},
? ? {"name": "MOTOROLA XOOM?", "snippet": "The Next, Next Generation tablet."}
? ];
}
?
? ?
? ? ? {{phone.name}}
? ? {{phone.snippet}}
? ?
?
?
这里我们使用ngRepeat指令和两个双大括号包裹起来的AngularJS表达式——{{phone.name}}和{{phone.snippet}}。
在
标签里面的ng-repeat="phone in phones"语句是一个AngularJS迭代器。这个迭代器告诉AngularJS用第一个标签作为模板,为模型列表phones中的每一部手机创建一个元素。
包裹在phone.name和phone.snippet周围的双大括号标识着数据绑定。和常量计算不同的是,这里的表达式实际上是一个数据模型的引用,这些数据模型我们在PhoneListCtrl控制器里面定义就好了。
在PhoneListCtrl控制器里面初始化了数据模型,尽管控制器看起来并没有起到什么控制的作用,但是它在这里起到了至关重要的作用。通过给定我们数据模型的定义,控制器允许我们建立模型和视图之间的数据绑定。
我们是这样把表现层,数据模型联系在一起的:PhoneListCtrl——控制器方法的名字,和
标签里面的ngController指令的值相匹配。手机模型的数据此时与注入到我们控制器函数的作用域($scope)相关联。这个控制器的作用域对所有标记内部的数据绑定有效。
AngularJS的作用域理论非常重要:一个作用域可以视作模板、模型和控制器协同工作的粘接器。AngularJS使用作用域,同时还有模板中的信息,数据模型和控制器,帮助模型和视图分离。
希望你喜欢,并分享我的工作~带你走近AngularJS系列: