任何人都可以解释$scope.$on
的工作情况以及$destroy
如何在这两个控制器中工作。就像我改变路由时,会调用另一个控制器,这就是调用$destroy
的原因吗?
如何$interval
初始化,我刚刚将它定义为promiseA下的变量,但它被初始化。我只是复制了这些行以满足要求,有人可以帮我理解这些代码行吗?
var myApp=angular.module('myApp',['ngRoute']);
myApp.controller('myController',function($scope){
});
myApp.controller('firstPage',function($scope,$interval){
$scope.thisMessage="First Message";
$scope.firstcall=function(){
var promiseA=$interval(function(){
console.log("First Page");
},10000);
$scope.$on('$destroy',function(){
$interval.cancel(promiseA);
});
}
});
myApp.controller('secondPage',function($scope,$interval){
$scope.thisMessage="Second Message";
$scope.thisMessage="Second Message";
$scope.secondcall=function(){
var promiseB=$interval(function(){
console.log("Second Page");
},10000);
$scope.$on('$destroy',function(){
$interval.cancel(promiseB);
});
}
});
myApp.config(function($routeProvider){
$routeProvider.when("/",{
templateUrl:"First.html"
})
.when("/second",{
templateUrl:"Second.html"
});
});
答案 0 :(得分:0)
使用$scope.$on
的长话短说明您可以为角度内部事件添加侦听器(订阅)以及您可以使用fix PR和$emit服务自行触发的自定义事件。 $destroy
本身是一个在控制器被销毁时被触发的事件,所以如果你想保存一些数据或者你想做什么,你就有了一个钩子。
您可以在Angular的文档$broadcast中找到有关此类内容的更多信息。
鉴于您在切换路线时每条路线都有不同的控制器,您实例化一条路线并销毁另一条路线(触发您正在侦听的$destroy
事件)。
我还建议您查看$off
方法,这是您可以取消订阅事件,避免内存泄漏和奇怪行为的方法。不幸的是,我无法找到任何关于此的文档,但它基本上是如何工作的,你订阅了这样的事件:
$scope.$on('customEvent', someFunction);
你取消订阅如下:
$scope.$on('$destroy', function() {
$scope.$off('customEvent', someFunction);
});
请注意,您不必在$destroy
听众中取消订阅,但我认为这是最佳做法。