2013-12-13 2 views
0

нового Угловой и застряли на то, что должно быть довольно легко ...AngularJS - Чтение JSON от фабрики, используя результат

У меня есть несколько ресурсов:

.factory('RSVPRes', function ($resource) { 
    return { 
    RSVP: $resource("../reservations/:id.json", {id:'@id'}, {'update': {method:'PUT'}, 'remove': {method: 'DELETE', headers: {'Content-Type': 'application/json'}}}), 
    Meals: $resource('../meals.json'), 
    UserInvites: $resource('../userinvite.json') 
    }; 
}) 

Meals.json:

[{"id":1,"name":"Chicken","description":"Chicken Yum!","created_at":"2013-12-11T22:37:28.994Z","updated_at":"2013-12-11T22:37:28.994Z","event_id":1,"event":{"name":"Wedding"}},{"id":2,"name":"Steak","description":"9oz","created_at":"2013-12-11T22:37:29.004Z","updated_at":"2013-12-11T22:37:29.004Z","event_id":2,"event":{"name":"Rehersal"}},{"id":3,"name":"Veggie","description":"Vegan","created_at":"2013-12-11T22:37:29.008Z","updated_at":"2013-12-11T22:37:29.008Z","event_id":3,"event":{"name":"Stag"}}] 

UserInvites.json:

[{"id":18,"created_at":"2013-12-11T23:00:18.684Z","updated_at":"2013-12-11T23:00:18.684Z","event_id":1,"registry_id":1,"user_id":9,"total_in_party":2}] 

Данные, похоже, отформатированы одинаково. Здесь все хорошо.

EDITED Теперь в моем контроллере

.controller('RSVPCtrl', function RSVPController($scope, RSVPRes, $state, $stateParams) { 

    //GET INVITATION(S) 
    RSVPRes.UserInvites.query().$promise.then(function(response){ 
    $scope.invitation = response.data; 
    //BUILD SELECT LIST FOR MEALS 
    $scope.meals = RSVPRes.Meals.query(); 

    //EDIT 
    if ($scope.rsvpId) { 
     $scope.rsvp = RSVPRes.RSVP.get({id: $scope.rsvpId}, function() { 
     // $scope.selectedUser = $scope.invite.user_id; 
     // $scope.selectedEvent = $scope.invite.event_id; 
     // $scope.selectedRegistry = $scope.invite.registry_id; 
     // $scope.selectedTotalInParty = $scope.invite.total_in_party; 
     }); 
    } 
    //NEW 
    else { 
     //INITIALIZE EMPTY GUESTS 
     $scope.guests = []; 
     for (var i = 0; i < $scope.invitation.total_in_party; i++) { 
     $scope.guests[i] = { 
      first_name: '', 
      last_name: '', 
      meal: 1, 
      rsvp: 0 
     }; 
     } 
    } 
    }); 

    $scope.submit = function() { 
    for (var i = 0; i < $scope.guests.length; i++){ 
     $scope.rsvp = new RSVPRes.RSVP(); 
     $scope.rsvp.first_name = $scope.guests[i].first_name; 
     $scope.rsvp.last_name = $scope.guests[i].last_name; 
     $scope.rsvp.meal_id = $scope.guests[i].meal; 
     $scope.rsvp.rsvp = $scope.guests[i].rsvp; 
     $scope.rsvp.$save(); 
    } 
    $state.transitionTo('rsvps'); 
    }; 
}) 

Осматривая мою response.data я получаю мою информацию, однако мой $ scope.invitation еще не определено ...

Любая помощь очень ценится!

+0

возможный дубликат [Угловое - http.get возвращающегося неопределенном] (http://stackoverflow.com/questions/20306717/angular-http-get-returning-undefined) – Stewie

+0

@Stewie Я обновил свой вопрос, чтобы отразить изменения, все еще имея некоторые проблемы с пониманием, хотя ... – OHope

ответ

1

Я думаю, что вы путаете reponse в функции обратного вызова для $resource с response для вызова $http GET. Вы должны использовать только response в обратном вызове для ресурса вместо resource.data. Как это:

//GET INVITATION(S) 
    RSVPRes.UserInvites.query().$promise.then(function(response){ 
    $scope.invitation = response; 
    //BUILD SELECT LIST FOR MEALS 
    $scope.meals = RSVPRes.Meals.query(); 

    //EDIT 
    if ($scope.rsvpId) { 
     /* $scope.rsvp = RSVPRes.RSVP.get({id: $scope.rsvpId}, function() { 
     // $scope.selectedUser = $scope.invite.user_id; 
     // $scope.selectedEvent = $scope.invite.event_id; 
     // $scope.selectedRegistry = $scope.invite.registry_id; 
     // $scope.selectedTotalInParty = $scope.invite.total_in_party; 
     });*/ 
    } 
    //NEW 
    else { 
     //INITIALIZE EMPTY GUESTS 
     $scope.guests = []; 
     for (var i = 0; i < $scope.invitation.total_in_party; i++) { 
     $scope.guests[i] = { 
      first_name: '', 
      last_name: '', 
      meal: 1, 
      rsvp: 0 
     }; 
     } 
    } 
    }); 

Из docs:

$ обещание: обещание исходного сервера взаимодействия, созданного этот экземпляр или коллекции.

При успешном выполнении обещание разрешается с помощью экземпляра экземпляра ресурса или объекта коллекции , обновленного данными с сервера. Это упрощает , чтобы использовать в разрезе раздел $ routeProvider.when() для отложенного просмотра рендеринга до загрузки ресурсов (ов).

При отказе обещание разрешено с помощью объекта ответа HTTP, без свойства ресурса.

Таким образом, в случае успеха , реакция на resource отличается от $http вызова.

Рабочий пример: http://plnkr.co/edit/k7rMLJmQpbwWJMcfqcvl?p=preview

+0

Большое спасибо! Работал! – OHope

2

Похоже, ваш response.data будет массив, который означает, что [$ scope.invitation] лучше назван [$ scope.invitations], так как вы создали чтобы получить (возможно) более одного. И эта возможность нескольких приглашений предполагает, что цикл For, который вы создали для создания пустых гостевых объектов, не совсем прав. Может попробовать это ...

for (var i = 0; i < $scope.invitation.length; i++){ 
    $scope.guests[i] = []; 
    for (var j=0; j < $scope.guests[i].total_in_party; j++) { 
     $scope.guests[i].total_in_party[j] = { 
      first_name: '', 
      last_name: '', 
      meal: 1, 
      rsvp: 0 
     }; 
     } 
    } 
} 
+0

Да, вы правы! В конце концов я разрешу приглашенному RSVP нескольким приглашениям, но на данный момент я просто пытаюсь заставить его работать в основном (одно приглашение) случае! – OHope

+0

Дело в том, что с answer.data у вас есть, $ scope.invitation.total_in_party не существует, но scope.invitation [0] .total_in_party существует. – mattsahr

+0

Да, это то, что я закончил делать (пока) Я должен организовать еще несколько данных, прежде чем обрабатывать несколько приглашений. Между вами и musically_ut я решил свою проблему (пока) :) – OHope

Смежные вопросы