Как использовать данные из $resource в запросе для другого с Angular

Я все еще изучаю Angular, и у меня возникают проблемы с доступом и использованием данных в $resources. У меня есть два вызова API с двумя наборами данных: ставки и пользователи.

url:/users/me возвращает текущее имя пользователя и идентификатор как объект

/wagers возвращает все ставки в виде массива. в ставках есть одно поле, называемое userA, ставки?userA=(текущий идентификатор пользователя) возвращает все ставки, у которых userA=текущий идентификатор пользователя.

У меня возникли проблемы с получением (текущего идентификатора пользователя) для динамического извлечения идентификатора текущего пользователя. Мой код ниже:

//services
.factory('User', function($resource, $cookies){
    return $resource('users/me', {}, {
        query: {method:'GET', params:{}, isArray:false}
    })
})
.factory('Wager', function($resource, User){
    return $resource('wagers/', {}, {
        query: {method:'GET', params:{}, isArray:true}
    })
})

//controller
function WagerListCtrl($scope, $cookies, User, Wager){
    $scope.users = User.query
    $scope.wagers = Wager.query({"userA":user.id})
}

person user2188552    schedule 26.06.2013    source источник
comment
Возможно, вы захотите добавить скобки в вызов запроса следующим образом: User.query()   -  person Foo L    schedule 26.06.2013
comment
Другое дело, что $resource — это всего лишь обещание, поэтому $scope.users, скорее всего, не будет доступен до тех пор, пока не завершится выполнение контроллера. Вы должны вызвать Wager внутри обратного вызова успеха.   -  person Foo L    schedule 26.06.2013
comment
Можете ли вы уточнить, как текущий идентификатор пользователя должен динамически извлекать идентификатор текущего пользователя?   -  person Stewie    schedule 26.06.2013


Ответы (1)


Во-первых, вам нужно вызвать запрос со скобками, например: User.query()

Во-вторых, $resource предоставляет только обещания, поэтому $scope.users, скорее всего, не будет доступен до тех пор, пока не завершится выполнение контроллера. Вы должны вызвать Wager внутри обратного вызова успеха.

User.query({}, function(data) {
  $scope.user = data;
  // assuming user has an id field
  $scope.wagers = Wager.query({"userA":$scope.user.id});
});
person Foo L    schedule 27.06.2013