停止'$ destroy'上的事件监听器。 TypeError:$ on不是函数;

时间:2016-11-16 11:49:44

标签: javascript angularjs angular-controller angularjs-events

我正在尝试在范围被破坏时停止所有事件侦听器。

我收到此错误:

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.');
          })
        }

1 个答案:

答案 0 :(得分:3)

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

使用controllerAs语法时,通常会误解您根本不应该使用$scope。但是,建议是避免对某些活动使用$scope而不是从控制器中删除它。范围始终存在,它是您的控制器的内部,只是不像视图模型一样使用它,但您仍然可以使用它来执行诸如听事件,广播,发送等任务。

尝试类似的事情(在您为依赖项注入$scope之后):

$scope.$on('$destroy', function() {
    vm.stop();
    console.log('DashboardController scope destroyed.');
})