来自 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。
我有几个看起来像这样的休息服务
/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。