如何重新初始化角度

时间:2015-12-10 00:19:26

标签: angularjs

我有一个角度应用程序,它使用许多服务来保存用户数据。但是,当我退出并再次登录另一个用户时,因为这些服务是单例并且没有机会初始化,因此,这些数据对于前一个用户仍然存在。

我可以做的是在登录后发出'登录'消息,并在每个服务中写一个listen来重新初始化,但这太费劲了。

所以我在想是否有办法重新初始化所有服务或整个角度应用程序。我知道重定向会完成这项工作,但还有更好的方法吗?

谢谢, 罗恩

2 个答案:

答案 0 :(得分:2)

我可以通过几种方式来实现这一目标,

  1. 您需要重置的所有服务都有一个重置功能,以便当用户注销时,重置功能在用户注销时执行
  2. 注销功能会广播导致所有必要服务重置的事件
  3. 我更赞成#1,但您甚至可以更进一步,创建一个执行所有重置功能的服务,这样您就需要执行一个功能来重置数据。

    例如

    function SomeController() {
        var vm = this;
        vm.click = function() {
            ResetService.resetAll();
        }
    
    }
    
    app.factory('ResetService', function(UserService, EmailService) {
        var resetAll = function() {
             UserService.reset();
             EmailService.reset();
        };
    
        return {
            resetAll: resetAll
        }
    }
    

答案 1 :(得分:2)

You could create a single Cache object (using Angular's $cacheFactory service) that is shared between each of your services to store data. Then, when the user signs out, you would just call the .removeAll() method on the cache.

angular.module('myApp')
    .factory('userDataCache', userDataCacheFactory)
    .factory('userService', userServiceFactory)
    .factory('authService', authServiceFactory);

function userDataCacheFactory($cacheFactory) {
    return $cacheFactory('userData');
}

function userServiceFactory(userDataCache) {
    var key = 'userService';
    var service = {
        setUserData: function(data) {
            userDataCache.put(key, data);
        },
        getUserData: function() {
            userDataCache.get(key);
        }
    };
}

function authServiceFactory(userDataCache) {
    var service = {
        logOut: function() {
            userDataCache.removeAll();
        }
    };
}