Javascript 在'上停止事件侦听器$销毁';。TypeError:$on不是一个函数;

Javascript 在'上停止事件侦听器$销毁';。TypeError:$on不是一个函数;,javascript,angularjs,angular-controller,angularjs-events,Javascript,Angularjs,Angular Controller,Angularjs Events,我试图在作用域被破坏时停止所有事件侦听器 我得到这个错误: TypeError: vm.$on is not a function; 这两个vm.on(..)都不起作用 问题是,vm没有声明(…上的$on,您必须使用$scope。将其注入控制器并像$scope.$on一样声明 当使用controllerAs语法时,经常会误解您根本不应该使用$scope。然而,建议避免对某些活动使用$scope,而不是从控制器中取消它。scope始终存在,它是控制器的内部,只是不要像视图m一样使用它odel,

我试图在作用域被破坏时停止所有事件侦听器

我得到这个错误:

TypeError: vm.$on is not a function; 
这两个vm.on(..)都不起作用


问题是,
vm
没有声明(…上的
$on,您必须使用
$scope
。将其注入控制器并像
$scope.$on
一样声明

当使用
controllerAs
语法时,经常会误解您根本不应该使用
$scope
。然而,建议避免对某些活动使用
$scope
,而不是从控制器中取消它。scope始终存在,它是控制器的内部,只是不要像视图m一样使用它odel,但是你可以用它来完成诸如听事件、广播、emmit等任务

尝试类似的方法(在对依赖项注入
$scope
之后):


问题是,
vm
没有声明(…
上的
$on,您必须使用
$scope
。将其注入控制器并像
$scope.$on
一样声明

当使用
controllerAs
语法时,经常会误解您根本不应该使用
$scope
。然而,建议避免对某些活动使用
$scope
,而不是从控制器中取消它。scope始终存在,它是控制器的内部,只是不要像视图m一样使用它odel,但是你可以用它来完成诸如听事件、广播、emmit等任务

尝试类似的方法(在对依赖项注入
$scope
之后):


vm
是一个控制器,而不是作用域。在这种情况下,您需要注入
$scope
服务。我不是AngularJS guy,但$on是$scope方法…
vm
是一个控制器,而不是作用域。在这种情况下,您需要注入
$scope
服务。我不是AngularJS guy,但$on是$scope方法。。。
    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.');
          })
        }
$scope.$on('$destroy', function() {
    vm.stop();
    console.log('DashboardController scope destroyed.');
})