0

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

我收到此错误:

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

1 回答 1

3

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

使用controllerAs语法时,这经常被误解为根本不应该使用$scope。但是,建议避免将$scope其用于某些活动,而不是从控制器中取消它。范围总是存在的,它是控制器的内部,只是不要像视图模型那样使用它,但无论如何你都可以将它用于诸如监听事件、广播、emmit 等任务。

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

$scope.$on('$destroy', function() {
    vm.stop();
    console.log('DashboardController scope destroyed.');
})
于 2016-11-16T11:56:13.260 回答