我正在使用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模型之前,我需要对返回的值执行一些数据操作。这是典型的行为吗?我缺少什么?或者我做错了什么?任何想法都会很有意义。我已经坚持了很长时间。
答案 0 :(得分:2)
在异步AJAX结果填充之前,您正在记录空数组。
Angular的一部分神奇之处在于它会自动更新tasks
阵列中的新数据,并自动更新视图。
作为证据,试试这个:
var Task = $resource('/tasks');
$scope.tasks = Task.query(function () {});;
$scope.$watch('tasks', function (value) {
console.log(value);
});
以下是the docs的引用:
重要的是要意识到调用$ resource对象方法会立即返回一个空引用(对象或数组,具体取决于isArray)。 从服务器返回数据后,现有参考将填充实际数据。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。具有空对象导致无渲染,一旦数据从服务器到达,则对象用数据填充,并且视图自动重新呈现其自身显示新数据。这意味着在大多数情况下,永远不必为动作方法编写回调函数。