如何在角度js中重新初始化服务或工厂

时间:2016-05-26 09:15:46

标签: javascript angularjs

我想在注销后重新初始化服务

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(){}
});

我有很多像上面这样的服务。我想在我退出时清除这些服务中的所有数据。

请告诉我最佳方法。

2 个答案:

答案 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()
    });