我已经创建了一个工厂,它可以将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
}
为什么会这样?
答案 0 :(得分:1)
我想没关系!您的第一个console.log打印一个对象。浏览器使输出与对象的状态保持同步。请记住list()是异步调用,因此结果将在稍后到达。第二个console.log输出打印对象的属性。如果数据到达,控制台不会更新此信息。
来自角度$ressource文档:
重要的是要意识到调用$ resource对象方法会立即返回一个空引用(对象或数组,具体取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。具有空对象导致无渲染,一旦数据从服务器到达,则对象用数据填充,并且视图自动重新呈现其自身显示新数据。这意味着在大多数情况下,永远不必为动作方法编写回调函数。