簡體   English   中英

如何在角度js中重新初始化服務或工廠

[英]How to re-initialize the service or factory in angular js

我想在注銷后重新初始化服務

var app = angular.module('plunker', []);

app.controller('ControllerA', ['$scope','serviceA',function($scope, serviceA)     {

    $scope.initializeA = function(){          
        serviceA.initialize("Chris");
    };  
}]);

和服務是

app.service('serviceA',function(){
 var service={};
 service.initialize=function(){}
});

我有很多像上面這樣的服務。 我想在注銷時清除這些服務中的所有數據。

請告訴我最好的方法。

我可以想到幾種方法可以做到這一點,但讓我們選擇一個:

您可以訂閱當控制器即將被銷毀時發生的$ destroy事件。 發生這種情況時,您可以調用已注入控制器的服務並對其進行初始化。 這將確保現在清除所有使用的服務(假設您的注銷是應用程序中的另一個狀態,使用ui-router ,例如,其中所有未處於當前狀態的組件都被銷毀)。

有很多方法可以達到你想要的效果。

因為您說要在注銷時要清除服務內部的數據,並且您沒有說明重定向或控制器 破壞 我將獲得$scope.$emit的簡單實現$scope.$emit$rootScope.$on

因此,在您的身份驗證控制器注銷時,您應該執行以下操作:

.controller('authenticationCtrl',[...
    //request for logout
    ...
        //On logout Success
        $scope.$emit('logout');
}]);

在您的服務中,您將收到以下信息:

...
.service('serviceA', ['$rootScope',function($rootScope){
    $rootScope.$on('logout', function () {
        //TODO: clear all the data you want
    });
}

另一種選擇是,如果再次構造模塊(重新加載/重定向),您可以使用運行功能來設置初始數據:

angular.module('plunker')
.run(
    function (serviceA) {

        // serviceA.initialize()
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM