我正在尝试在代码中使用$ emit作为指令。
我有
(function () {
angular
.module('myApp')
.directive('testDirective', testDirective);
function testDirective() {
var directive = {
link: link,
restrict: 'A',
controller: testCtrl,
controllerAs: 'vm'
};
return directive;
function link(scope, element, attrs) {
}
}
function testCtrl() {
var vm = this;
// do something
vm.$emit('someEvent', {'id': '123'})
}
})();
然而,我得到'TypeError: vm.$emit is not a function
'。我不知道如何解决这个问题。有人可以帮忙吗?非常感谢!
答案 0 :(得分:4)
controllerAs
只是意味着范围变量直接附加到控制器 - 它并不意味着控制器本身就是角度范围的实例。在这种情况下,您需要将范围注入控制器,然后从范围内发出事件:
function testCtrl($scope) {
// do something
$scope.$emit('someEvent', {'id': '123'})
}
另外要注意,正常的注射规则适用 - 如果你要缩小它,你可能需要这样的东西:
testCtrl['$inject'] = ['$scope'];