我正在尝试在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
}
答案 0 :(得分:1)
controllerAs语法使用绑定到this
的控制器内的$scope
。但$scope
是一个特殊对象,其中包含$watch
,$on
和其他特殊属性。
因此,当您想要观察某些变量或听取事件时,您必须仅使用$scope
。
答案 1 :(得分:1)
$scope
和myCtrl
标识符不可互换。 '控制器为'是一种语法糖,在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
来轻松查看。