Javascript 角度控制器作为语法,在特殊场合还需要$scope吗?

Javascript 角度控制器作为语法,在特殊场合还需要$scope吗?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我使用angular的“controller as somename”语法 假设下面的函数是我的控制器 function myCOntroller($scope) { $scope.$emit('event'); } 上述功能正在运行。我试着像下面一样 function myController() { var reference = this; reference.$emit('event'); } 这是行不通的。当我可以使用引用进行数据绑定时。为什么我不能用它来做这类事情。我

我使用angular的“controller as somename”语法

假设下面的函数是我的控制器

function myCOntroller($scope)
{
  $scope.$emit('event');
}
上述功能正在运行。我试着像下面一样

function myController()
{
  var reference = this;
  reference.$emit('event');
}
这是行不通的。当我可以使用引用进行数据绑定时。为什么我不能用它来做这类事情。我认为reference现在拥有$scope拥有的所有功能。如果$emit以这种方式工作,难道没有意义吗

注意:对于代码示例,非常抱歉。我只是问了这个问题作为回答 概念证明,所以没有任何真正的代码

如前所述

“Controller as”是在1.2中引入的一种语法糖,它试图修复$scope的体验(至少是其中遭受scope原型继承不良影响的部分)


...
应用程序控制器('MyCtrl',函数(){
...
});
与相同

<body ng-controller="MyCtrl">
...
app.controller('MyCtrl', function ($scope) {
  $scope.myCtrl = this;
  ...
});

...
应用程序控制器('MyCtrl',函数($scope){
$scope.myCtrl=this;
...
});
它并没有消除对范围的需求,而是将有用的模式引入控制器(注意,在前一个示例中,您不需要注入$scope,除非您需要$scope.$on,等等)

因此,当您希望它充当模型时,请使用
this
而不是
$scope

“controllerAs”不会使
this==$scope

使用
controllerAs
之前的最佳实践,控制器应与作用域一起使用

然后HTML看起来像

<div ng-controller="myController">{{ myControl.data }}</div>
它让你写作

<div ng-controller="myController as myControl">
    {{ myControl.data }} <!-- === $scope.myControl.data -->
   <!-- "as" sets the name of the controller, on the scope -->
   <!-- $scope.myControl.$scope === $scope -->
</div>

{{myControl.data}

$scope
不是控制器本身。
此。$scope
未定义,因此
myController。$scope.$emit(/*..*/)
将引发错误。
<div ng-controller="myController">{{ myControl.data }}</div>
angular.module("myApp")
.controller("myController", [function MyController ( ) {
    var myController = angular.extend(this, { data: 123 });
    myController.$scope.$emit( /* ... */ );
}]);
<div ng-controller="myController as myControl">
    {{ myControl.data }} <!-- === $scope.myControl.data -->
   <!-- "as" sets the name of the controller, on the scope -->
   <!-- $scope.myControl.$scope === $scope -->
</div>