[英]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.