2014-02-05 52 views
0

我已经创建了一个工厂,它可以通过HTTP访问php脚本。Javascript Object出现然后消失Angular Js

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 
} 

为什么会出现这种情况?

+0

当你输出第一条消息,并获得对象是'数据'的对象的属性? –

+0

是的,如应该显示的对象所示 –

回答

1

我想这是可以的!你的第一个console.log打印一个对象。浏览器将输出与对象的状态保持一致。请记住,list()是一个异步调用,所以结果稍后会到达。第二个console.log输出打印该对象的属性。如果数据到达,控制台不会更新。

从角$ressource文档:

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

+0

能否详细说明,有点难以理解 –

+0

如果是异步的,那么如何获取信息?如果它使用'$ resources' –

+0

@ No1_Melman,请参阅编辑过的文章。 – michael