ngResource параметры по умолчанию из обещания
У меня есть несколько служб отдыха, которые выглядят так
/user/:userId/resource/:resourceId
Большую часть времени пользователь хочет получить свои собственные ресурсы (хотя иногда он хочет получить другой ресурс пользователя), поэтому я хочу, чтобы параметром по умолчанию был текущий идентификатор пользователя, но я не могу сохранить идентификатор пользователя в корневом каталоге / службе, потому что если пользователь обновляет браузер, этого больше не будет, поэтому я хочу сделать что-то вроде этого:
$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;
}
}
как я могу заставить его работать для всех сервисов (так как сейчас я просто всегда связываю все сервисы ресурсов после получения user Id... есть ли лучший способ?
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;
}
Тогда ваш $ ресурс не получит никаких обещаний, и вы сможете получить доступ / изменить идентификатор пользователя из любой точки кода, не загрязняя ваш $rootScope.