2013-08-14 4 views
0

Я использую AngularJS и NGResource, и я не могу понять, почему, когда я использую запрос, я продолжаю получать пустой массив.Не могу понять, почему ng-resource не возвращает массив

В мой контроллер, я делаю

Task = $resource('/tasks'); 
var tasks = Task.query(function() {}); 
console.log(tasks); 
$scope.tasks = tasks; 

По мнению

{{tasks}} 

В представлении отображается правильно

[{"created_at":"08/08/2013","created_by_id":2,"description":"description","id":1,"name":"test task 1","parent_task_id":null,"task_type_id":1,"updated_at":"08/08/2013"}, 
{"created_at":"08/08/2013","created_by_id":2,"description":"description","id":2,"name":"test task 2","task_type_id":1,"updated_at":"08/08/2013"}] 

, но в консоли он получает вошли как пустой массив:

[] 

Кроме того, я использую расширение Batarang для хрома и объем, что он показывает задачи, имеющее это:

tests: 
    [ ] 

Мне нужно выполнить некоторые операции с данными на возвращаемом значении, прежде чем я положил его в $ модель. Является ли это типичным поведением и тем, что мне не хватает? Или я делаю что-то неправильно? Любые идеи были бы ценными. Я слишком долго задерживался на этом.

ответ

2

Вы регистрируете пустой массив до того, как он будет заполнен асинхронным результатом AJAX.

Часть волшебства Углового заключается в том, что он автоматически обновит массив tasks новыми данными по мере его прохода, а также автоматически обновит представление.

В качестве доказательства, попробуйте следующее:

var Task = $resource('/tasks'); 

$scope.tasks = Task.query(function() {});; 

$scope.$watch('tasks', function (value) { 
    console.log(value); 
}); 

Вот цитата из the docs:

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

+0

Спасибо за ваш ответ. Наверное, я не получу обещаний столько, сколько должен. Я правильно понимаю, что асинхронный запрос не завершен, пока он не ударит по моим представлениям? Что мне делать в случае, если я хочу, чтобы мои данные до этого процесса завершались? Aka Мне нужно сделать три запроса и получить задания, оценки и статусы. Затем мне нужно объединить их вместе, поскольку оценки имеют идентификатор задачи, а статусы имеют идентификатор оценки. Мне нужно просмотреть каждую оценку и статус. Но мне кажется, что я не хочу, чтобы представление сначала отображалось ... – ruevaughn

+0

Я видел это в этой ссылке http://stackoverflow.com/questions/16387202/angularjs-resource-query-result-array-as-a- свойство? rq = 1 – ruevaughn

+0

Я видел это в этой [ссылке] (http://stackoverflow.com/questions/16387202/angularjs-resource-query-result-array-as-a-property?rq=1) Что я могу используйте transformResponse. Я попробую это – ruevaughn

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