繁体   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