繁体   English   中英

将事件侦听器停止在“ $ destroy”上。 TypeError:$ on不是函数;

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM