【发布时间】:2015-10-11 03:13:11
【问题描述】:
我有几个这样的休息服务
/user/:userId/resource/:resourceId
大多数时候用户想要获得自己的资源(尽管有时他想要获得另一个用户的资源) 所以我希望默认参数是当前用户 ID,但我无法将 UserId 保存在 rootscope/service 上,因为如果用户刷新浏览器,这将消失,所以我想做这样的事情:
$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 之后链接每个资源服务......有没有更好的方法?
【问题讨论】:
-
就个人而言,我在会话中存储了这样的非敏感数据。这样,在浏览器关闭或用户注销之前,它都可以轻松访问和使用。这比尝试设置服务来处理此类事情要容易得多。
-
如果它是一个常规的 $http 调用,它会很容易,因为资源的行为,资源的工作量更大。如果您将该 $resource 更改为常规 $http 调用,我可以为您提供帮助,并且您可以从那里进行调整。
-
@BenjaminGruenbaum 我知道手动构建这样的请求是可能的,但是我有很多restful apis并且ngResource库很好地为我服务。
-
好吧,你总是可以在路由器的
resolve子句中为 userId 做出承诺。 -
@BenjaminGruenbaum 很好,我从未使用过“解决”功能,看起来很有用,谢谢。但是现在大家提倡不要直接使用带路由的控制器,而是通过指令来代替,并且将另一个通用变量传递给每个指令是很麻烦的。似乎我可以直接将本地存储连接到请求,而我可以忘记查找从哪里获取用户 ID。你知道做一些类似于解决功能的方法吗?等待承诺同步解决?因为如果可以做到,我可以将其连接起来,而不是通过路由器。
标签: angularjs promise angular-promise angularjs-resource