Angular $ rootScope。$ broadcast not return

时间:2016-10-18 05:50:10

标签: angularjs angular-kendo

我使用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 
    }

}]);

如果我对destroyremove来电发表评论,那么一切正常 但是当我添加时,$rootScope.$broadcats不会返回服务。

我需要removedestroy来清除屏幕和相关状态。

如何解决此问题?

更新

我从我的控制器注销如下的广播监听器。

// While registering listener   
var deregisterMessage = $scope.$on(MyService.MESSAGE, function(event, data) 
{
});

// At the time of removing screen 
if( deregisterMessage != null )
{
   deregisterMessage();
   deregisterMessage = null;
}

1 个答案:

答案 0 :(得分:0)

不要使用控制器中的$rootScope.$on,因为即使在控制器被销毁之后,事件监听器仍然存在并导致内存泄漏。

最好为您需要收听或广播的每个事件创建服务。