Не могу понять, почему ng-ресурс не возвращает массив
Я использую AngularJS и NGResource и не могу понять, почему, когда я использую запрос, я продолжаю возвращать пустой массив.
В моем контроллере я делаю
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 для Chrome и область, в которой он показывает задачи как:
tests:
[ ]
Мне нужно выполнить некоторые операции с данными над возвращенным значением, прежде чем поместить его в модель $ scope. Это типичное поведение и есть что-то, чего мне не хватает? Или я что-то не так делаю? Любые идеи будут благодарны. Я застрял на этом слишком долго.
1 ответ
Вы регистрируете пустой массив до того, как он будет заполнен асинхронным результатом AJAX.
Часть волшебства Angular в том, что он автоматически обновит tasks
массив с новыми данными, как это происходит по проводам, а также автоматическое обновление представления.
В качестве доказательства попробуйте это:
var Task = $resource('/tasks');
$scope.tasks = Task.query(function () {});;
$scope.$watch('tasks', function (value) {
console.log(value);
});
Вот цитата из документов:
Важно понимать, что вызов метода объекта $resource немедленно возвращает пустую ссылку (объект или массив в зависимости от isArray). Как только данные возвращаются с сервера, существующая ссылка заполняется фактическими данными. Это полезный прием, так как обычно ресурс назначается модели, которая затем визуализируется представлением. Наличие пустого объекта не приводит к визуализации, как только данные поступают с сервера, тогда объект заполняется данными, и представление автоматически повторно отображает себя, показывая новые данные. Это означает, что в большинстве случаев никогда не нужно писать функцию обратного вызова для методов действия.