来自 promise 的 ngResource 默认参数

ngResource default parameters from promise

我有几个看起来像这样的休息服务

/user/:userId/resource/:resourceId

大多数时候用户想得到自己的资源(虽然有时他想得到其他用户的资源) 所以我希望默认参数是当前用户 ID,但我不能将 UserId 保存在 rootscope/service 上,因为如果用户刷新浏览器,它就会消失,所以我想做这样的事情:

$resource('/user/:userId/resource/:resourceId', { userId: getUserId, resourceId: '@id' })

问题是 getUserId() returns 一个承诺:

function getUserId() {
    if (!$rootScope['user']) {
        $rootScope['user'] = UserService.get({ userId: 'current' })
    }
    return $rootScope['user'].$promise.then(function (user) {
        return user.id;
    }
}

我怎样才能让它适用于所有服务(就目前而言,我总是在 userId 之后链接每个资源服务 getter...有更好的方法吗?

使用浏览器会话存储此非敏感数据。

// Set the user object into the session as a JSON object
function setUser(user) {
    sessionStorage.setItem("user", JSON.stringify(user));
}

// Retrieve user object and parse the userID
function getUserId() {
    var tmpUser = JSON.parse(sessionStorage.getItem('user'));
    return tmpUser.userID;
}

然后你的 $resource 将不会有任何返回给它的承诺,你可以从代码中的任何地方 access/modify 用户 ID 而不会污染你的 $rootScope。