角度根镜从服务广播

时间:2016-01-18 11:11:26

标签: angularjs

我听说在控制器上使用rootscope $是一种不好的做法,因为当一个控制器被销毁时,事件监听器就不会。如果我从服务中使用它并将其注入控制器,如下所示,它是否会阻止内存泄漏?

.service("hiEventService",function($rootScope) {
    this.broadcast = function() {$rootScope.$broadcast("hi")}
    this.listen = function(callback) {$rootScope.$on("hi",callback)}
})

1 个答案:

答案 0 :(得分:2)

我不认为这会阻止'内存泄漏,因为它永远不会在应用程序的生命周期内被破坏,因为每个偶数都在$rootScope上注册。

最佳做法是在范围破坏时销毁侦听器。

例如,如果有一个控制器正在监听这样的事件,

$scope.$on('anEvent', function(){});

不需要销毁监听器,因为监听器将自动在范围销毁时自动取消注册。

另一方面,如果事件在$rootScope上注册,

var eventHandle = $rootScope.$on('anEvent', function(){});

偶数可以(并且应该)通过在范围destroy上执行eventHandle(这是一个函数)来销毁:

$scope.$on('$destroy', function(){
    eventHandle();
});

此外,尽量避免在$rootScope上播放活动。尝试在子范围上使用$emit$broadcast。更多信息:$rootScope.$broadcast vs. $scope.$emit