Javascript 在ES6 angularjs控制器类中注册和注销setInterval()

Javascript 在ES6 angularjs控制器类中注册和注销setInterval(),javascript,angularjs,ecmascript-6,angular-ui-router,Javascript,Angularjs,Ecmascript 6,Angular Ui Router,我使用一个控制器类作为状态控制器,并在构造函数中注册了一个setInterval()方法,以便在每30秒后调用一个服务 export default class abc { constructor() { setInterval(() => { service class; }, 30000 ); } } 现在的问题是,当状态改变时,服务调用仍在发生,所以需要使用clearInterval()方法,但不确定如何使用它。 因为它不是一个组件,所以不能使用$on

我使用一个控制器类作为状态控制器,并在构造函数中注册了一个setInterval()方法,以便在每30秒后调用一个服务

export default class abc {

constructor() {
setInterval(() => {
        service class;
      }, 30000 );
}
}
现在的问题是,当状态改变时,服务调用仍在发生,所以需要使用clearInterval()方法,但不确定如何使用它。
因为它不是一个组件,所以不能使用$ondestroy()。也不想使用statechange事件监听器等。是否有其他方法,如析构函数或类似的方法,可用于注销setInterval。我使用的是带有ES 6语法的angular ui路由器。非常感谢您的帮助。

$onDestroy
钩子是所有指令控制器的专用工具,而不仅仅是组件。是的

由于状态控制器有自己的作用域,因此对于基于模板的路由,这可以通过作用域
$destroy
侦听器完成:

$scope.$on('$destroy', () => {
  clearInterval(interval);
});

UI Router 1.0支持$onDestroy。

谢谢您的回答。。但是我正在寻找一个不使用$scope的解决方案。$on,因为我在课堂上使用了'this'。。如果没有$scope,我将使用它。。。此外,我使用的是旧版本的ui router。我能想到的一个解决方案是在组件下使用此代码和相应的视图,并在调用状态时呈现的主/索引页下使用该组件。使用
this
并不意味着不能使用$scope。此外,您应该在任何必要的时候使用它,就像在本例中一样。顺便说一句,UI路由器有一个扩展,允许使用0.x中的组件。酷。。谢谢你的信息。