使用$scope方法时的ControllerAs语法

ControllerAs Syntax when using $scope methods

本文关键字:ControllerAs 语法 方法 scope 使用      更新时间:2023-09-26

我正在尝试在AngularJS 1.3 中实现controllerAs语法

我开始我的函数声明是这样的:

function() {
    var myCtrl = this;
    myCtrl.foo = foo; // works fine
    myCtrl.$on("foo", bar); // fails, says myCtrl.$on is not a function
}
controllerAs语法在绑定到$scope的控制器内部使用this。而$scope是一个特殊的对象,它包含了$watch$on等特殊性质

因此,当您需要监视某些变量或侦听事件时,您必须仅使用$scope

$scopemyCtrl标识符不可互换。'Controller as’是1.2中引入的一个语法糖,它试图修复$scope的经验(至少是其中受到范围原型继承不良影响的部分)。

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

与相同

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

它并没有消除对作用域的需要,而是在控制器中引入了有用的模式(注意,在前一个示例中不需要注入$scope,除非需要$scope.$on等)。

通过记录$scopemyCtrl,您可以很容易地自己查看它。