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://协议的资源。
   77   78   79   80   81   82   83   84   85   86   87