无法弄清楚为什么ng-resource不会返回数组

时间:2013-08-14 03:56:15

标签: javascript ruby-on-rails ajax angularjs angular-resource

我正在使用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 个答案:

答案 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)。 从服务器返回数据后,现有参考将填充实际数据。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。具有空对象导致无渲染,一旦数据从服务器到达,则对象用数据填充,并且视图自动重新呈现其自身显示新数据。这意味着在大多数情况下,永远不必为动作方法编写回调函数。