使用$ scope并明确使用ctrl作为命名空间有什么不同?

时间:2017-02-10 08:33:07

标签: angularjs scope

我们可以使用$scope作为angularJS

中的命名空间



    angular.module('myApp',[])
           .controller("myController", function($scope){
            $scope.info = "Hello";
    })

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="myApp">
    <div ng-controller="myController">
         <input type="text" ng-model="info">
         {{info}}
    </div>
  </body>
&#13;
&#13;
&#13;

或者我们可以在this中明确使用controller,并将控制器名称用作视图中的命名空间,如:

&#13;
&#13;
    angular.module('myApp',[])
           .controller("myController", function(){
            this.info = "Hello";
    })
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">
    <div ng-controller="myController as ctrl">
         <input type="text" ng-model="ctrl.info">
         {{ctrl.info}}
    </div>
</body>
&#13;
&#13;
&#13;

我的问题是,差异和选择使用的是什么?

1 个答案:

答案 0 :(得分:1)

链接Angularjs "Controller as" or "$scope"中的这个答案给出了关于控制器与$范围的解释。

另外,根据我自己的经验,我更喜欢controllerAs语法。因为,我通常会将动态数据添加到对象数组中。

使用$ scope选项时,当新数据被推入数组时,ng-repeat无法自行刷新,例如$ scope.dataArray

使用controllerAs语法时,每当我将数据推入dataArray对象时,ng-repeat都会将新数据添加到视图中。

这主要是因为,当使用$ scope语法时,对数组的任何更改都会创建一个新引用。但是,使用controllerAs语法时,始终会维护数组引用。

参考ng-repeat not updating on update of array