使用$ scope方法时的ControllerAs语法

时间:2015-04-09 17:25:00

标签: javascript angularjs

我正在尝试在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
}

2 个答案:

答案 0 :(得分:1)

controllerAs语法使用绑定到this的控制器内的$scope。但$scope是一个特殊对象,其中包含$watch$on和其他特殊属性。

因此,当您想要观察某些变量或听取事件时,您必须仅使用$scope

答案 1 :(得分:1)

$scopemyCtrl标识符不可互换。 '控制器为'是一种语法糖,在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;
  ...
});

它不会消除对范围的需求,但会在控制器中引入有用的模式(请注意,除非您需要{{1},否则您不需要在前一个示例中注入$scope等等)。

您可以通过同时记录$scope.$on$scope来轻松查看。