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