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.

Другие вопросы по тегам