我想在注销后重新初始化服务
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(){}
});
我有很多像上面这样的服务。我想在我退出时清除这些服务中的所有数据。
请告诉我最佳方法。
答案 0 :(得分:0)
我可以想到几种方法可以做到这一点,但让我们选择一个:
您可以订阅控制器即将被破坏时发生的$ destroy事件。发生这种情况时,您可以调用已注入控制器的服务并对其进行初始化。这将确保现在清除所有使用的服务(假设您的注销是应用程序中的另一个状态,使用ui-router
,例如,其中所有未处于当前状态的组件都将被销毁。)
答案 1 :(得分:0)
有很多方法可以达到你想要的效果。
由于您在注销时表示要清除服务内部的数据,而您对重定向或销毁一无所知控制器。我将简化$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()
});