0

我正在使用 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"}]

但在控制台中它被记录为一个空数组:

[]

另外,我正在使用 chrome 的 batarang 扩展,它显示任务的范围是:

tests: 
  [  ]

在将返回值放入 $scope 模型之前,我需要对返回值执行一些数据操作。这是典型的行为吗?我缺少什么吗?还是我做错了什么?任何想法都会不胜感激。我已经被困在这太久了。

4

1 回答 1

2

在异步 AJAX 结果填充空数组之前,您正在记录它。

Angular 的部分魔力在于它会tasks在新数据通过网络时自动更新数组,并自动更新视图。

作为证据,试试这个:

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

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

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

这是来自文档的引用:

重要的是要意识到调用 $resource 对象方法会立即返回一个空引用(对象或数组取决于 isArray)。一旦从服务器返回数据,现有的引用就会填充实际数据。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。拥有一个空对象不会导致渲染,一旦数据从服务器到达,那么该对象就会被数据填充,并且视图会自动重新渲染自身以显示新数据。这意味着在大多数情况下,我们不必为操作方法编写回调函数。

于 2013-08-14T04:04:05.320 回答