Javascript对象出现然后消失Angular Js

时间:2014-02-05 17:30:59

标签: javascript angularjs

我已经创建了一个工厂,它可以将HTTP转换为php脚本。

php脚本将正确的数据返回给工厂,然后工厂将其数据发送到控制器:

.controller('CatListController', ['$scope', 'Category', function ($scope, Category) {
$scope.categories = {};

var res = Category.list();

console.log(res); // <-- shows the proper object
console.log(res.data); //<-- shows nothing

if (res.error) {
    $scope.error = true;
    $scope.message = "http error";
}else{
    if (res.data.error) {
        $scope.error = true;
        $scope.message = "database error";
    }
    $scope.categories = res.data;
}
  }]);

第一个控制台日志完整显示完整对象,但下一个控制台日志显示一个空对象。

应该显示的对象是(并且来自控制台日志res):

{
  data: { name: "" },
  error: false
}

为什么会这样?

1 个答案:

答案 0 :(得分:1)

我想没关系!您的第一个console.log打印一个对象。浏览器使输出与对象的状态保持同步。请记住list()是异步调用,因此结果将在稍后到达。第二个console.log输出打印对象的属性。如果数据到达,控制台不会更新此信息。

来自角度$ressource文档:

  

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