如何从经过身份验证的用户更新带有id的角度资源URL?

时间:2016-01-23 22:04:15

标签: angularjs ngresource angularjs-resource

所以我用ngResource定义了多个角度工厂,类似于:

.factory('factoryName', ['$resource', '$http', 'CONSTANTS', 'authService', factoryNameCtrl])
function factoryNameCtrl($resource, $http, CONSTANTS, authService) {
    var actions = {
        'get': {
            method: 'GET',
            isArray: false,
            params: {
                service: '@service',
                action: '@action'
            }
        },
        'post': {
            method: 'POST',
            isArray: false,
            params: {
                service: '@service',
                action: '@action'
            }
        }
    }
    actions.get.params.userId = actions.post.params.userId = '@' + authService.currentUser.id;
    var res = $resource(CONSTANTS.baseURL + '/:userId/integrations/:service/:action', {}, actions);

如果我使用其他用户登录并注销,则工厂内的userId值不会更新。

我不想将userId传递到我的代码中的每个参数中,而是在它发生变化时使其可用。

以前我有下面的代码,我强迫页面重新加载以重建正确的URL到资源。

if (authService.isAuthenticated()) {
        var res = $resource(CONSTANTS.baseURL + '/' + authService.currentUser.id + '/integrations/:service/:action', {}, actions);
        return res;
    }

你建议做什么?

1 个答案:

答案 0 :(得分:1)

要每次计算新鲜度,请使用以下函数:

actions.get.params.userId = function () {
    return computeCurrentUserId();
};

来自文档:

  

如果参数值是一个函数,每次执行时需要获取一个请求的参数值(除非重写了参数)。

- AngularJS $resource API Reference