[英]Stop event listeners on '$destroy'. TypeError: $on is not a function;
我试图在范围被破坏的同时停止所有事件监听器。
我收到此错误:
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.');
})
}
问题是vm
没有声明$on(...
,您必须使用$scope
。将其插入控制器并像$scope.$on
一样声明。
当使用controllerAs
语法时,这常常被人误解为根本不应该使用$scope
。 但是,建议您避免在某些活动中使用$scope
而不从控制器中取消它。 范围将始终存在,它是控制器的内部组件,只是不要像视图模型那样使用它,但是无论如何,您都可以使用它来执行诸如侦听事件,广播,发送等任务。
尝试类似的事情(在对依赖项注入$scope
之后):
$scope.$on('$destroy', function() {
vm.stop();
console.log('DashboardController scope destroyed.');
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.