我有几个看起来像这样的休息服务
/user/:userId/resource/:resourceId
大多数时候用户想要获得自己的资源(尽管有时候他想获得另一个用户的资源) 所以我希望默认参数是当前用户ID,但是我无法在rootcope / service上保存UserId,因为如果用户刷新浏览器,这将消失,所以我想做这样的事情:
$resource('/user/:userId/resource/:resourceId', { userId: getUserId, resourceId: '@id' })
问题是getUserId()
会返回一个承诺:
function getUserId() {
if (!$rootScope['user']) {
$rootScope['user'] = UserService.get({ userId: 'current' })
}
return $rootScope['user'].$promise.then(function (user) {
return user.id;
}
}
如何让它适用于所有服务(现在我只是在userId getter之后总是链接每个资源服务......有更好的方法吗?
答案 0 :(得分:1)
使用浏览器会话存储此非敏感数据。
// 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;
}
然后您的$资源将不会返回任何承诺,您可以从代码中的任何位置访问/修改userID,而不会污染您的$ rootScope。