我正在尝试在范围被破坏时停止所有事件侦听器。
我收到此错误:
TypeError: vm.$on is not a function;
vm.on(..)都不能正常工作
angular.module('app.layout')
.controller('DashboardController', DashboardController);
DashboardController.$inject = ['$interval','dataservice'];
function DashboardController($interval, dataservice) {
var vm = this;
vm.name = "DashboardController";
console.log('Init Dashboard Controller');
initEvents();
/*
...
*/
/////////////////////////////
function initEvents() {
vm.$on('$destroy', function() {
vm.stop();
console.log('DashboardController scope destroyed.');
})
}
答案 0 :(得分:3)
问题是vm
没有声明$on(...
,您必须使用$scope
。将其注入您的控制器并声明为$scope.$on
。
使用controllerAs
语法时,通常会误解您根本不应该使用$scope
。但是,建议是避免对某些活动使用$scope
而不是从控制器中删除它。范围始终存在,它是您的控制器的内部,只是不像视图模型一样使用它,但您仍然可以使用它来执行诸如听事件,广播,发送等任务。
尝试类似的事情(在您为依赖项注入$scope
之后):
$scope.$on('$destroy', function() {
vm.stop();
console.log('DashboardController scope destroyed.');
})