我使用Angular Kendo作为UI的AngularJS应用程序 从我发送广播到控制器的服务之一。
我从服务发送广播如下:
angular.module('MyAppModule')
.service('MyService', ['$rootScope',function($rootScope)
{
this.MESSAGE = "broadcast_msg";
function sendBroadcast(message, data)
{
console.log("I get this log");
$rootScope.$broadcast(message, data);
console.log("I don't get this log");
}
function onSomeEvent(data)
{
sendBroadcast(MESSAGE, data)
}
}]);
在我的控制器中:
angular.module('MyAppModule')
.controller('MyViewCtrl', ['$scope', 'MyService', function($scope, MyService)
{
function init()
{
$scope.$on(MyService.MESSAGE, function(event, data)
{
if( data.state == "some_state")
{
process()
}
});
}
function process()
{
// Destroy and remove current screen
$("#MyView").data("kendoMobileView").destroy(); // KendoMobileView is provide by Kendo
$("#MyView").remove(); // MyView - is that ID of kendo mobile view
}
}]);
如果我对destroy
和remove
来电发表评论,那么一切正常
但是当我添加时,$rootScope.$broadcats
不会返回服务。
我需要remove
和destroy
来清除屏幕和相关状态。
如何解决此问题?
更新
我从我的控制器注销如下的广播监听器。
// While registering listener
var deregisterMessage = $scope.$on(MyService.MESSAGE, function(event, data)
{
});
// At the time of removing screen
if( deregisterMessage != null )
{
deregisterMessage();
deregisterMessage = null;
}
答案 0 :(得分:0)
不要使用控制器中的$rootScope.$on
,因为即使在控制器被销毁之后,事件监听器仍然存在并导致内存泄漏。
最好为您需要收听或广播的每个事件创建服务。