Page 82 - AngularJS权威教程
P. 82
62 第 9 章 内置指令
JavaScript对象要么是值复制要么是引用复制。字符串、数字和布尔型变量是值
复制。数组、对象和函数则是引用复制。
如果将模型对象的某个属性设置为字符串,它会通过引用进行共享,因此在子$scope中修改
属性也会修改父$scope中的这个属性。下面的例子展示了正确的做法:
<div ng-controller="SomeController">
{{ someModel.someValue }}
<button ng-click="someAction()">Communicate to child</button>
<div ng-controller="ChildController">
{{ someModel.someValue }}
<button ng-click="childAction()">Communicate to parent</button>
</div>
</div>
angular.module('myApp', [])
.controller('SomeController', function($scope) {
// 最佳实践,永远使用一个模式
$scope.someModel = {
someValue: 'hello computer'
}
$scope.someAction = function() {
$scope.someModel.someValue = 'hello human, from parent';
};
})
.controller('ChildController', function($scope) {
$scope.childAction = function() {
$scope.someModel.someValue = 'hello human, from child';
};
});
在线示例:http://jsbin.com/afIyeda/1/edit。
无论点击哪个按钮,值都会进行同步修改。
注意,虽然这个特性是使用ng-controller时最重要的特性之一,但在使用任何会创建子作
用域的指令时,如果将指令定义中的scope设置为true,这个特性也会带来负面影响。下面的内
置指令都有同样的特性:
ng-include
ng-switch
ng-repeat
ng-view
ng-controller
ng-if
3. ng-include
使用ng-include可以加载、编译并包含外部HTML片段到当前的应用中。模板的URL被限制
在与应用文档相同的域和协议下,可以通过白名单或包装成被信任的值来突破限制。更进一步,
需要考虑跨域资源共享(Cross-Origin Resource Sharing,CORS)和同源规则(Same Origin Policy)
来确保模板可以在任何浏览器中正常加载。例如,所有浏览器都不能进行跨域的请求,部分浏览
器也不能访问file://协议的资源。