2014-02-13 88 views
0

我有一个简单的应用程序,它从REST API返回对象并将它们绑定到作用域var。这工作正常,但如果我尝试对从$资源承诺返回的对象做任何工作,对象是未定义的。AngularJS评估递延对象

我把这个plunkr放在一起来重现使用$ q服务的行为。第一部分将简单数组绑定到作用域,第二部分通过延迟对象获取同一数组。第三个通过延迟对象再次获取数组,然后尝试将一些简单的逻辑应用于返回的对象。不幸的是,返回的对象没有'length'属性。很明显,我错过了一些东西,大概是$ scope的一些用法。$ apply但是我没有运气。

我在做什么错了?

回答

1

您需要使用then与你的诺言。

asyncInit().then(function(data){ 
    $scope.deferredPersons = data; 
}); 

从现在起,您可以访问往常一样你的数据,并可以在其上调用.length。请注意,使用promise时应始终处理错误,否则可能难以调试。

+0

谢谢你。修改后的[plunkr](http://plnkr.co/edit/dmciBfIDW9X42pEtQ314?p=preview)现在具有基本的错误处理功能,并显示对延迟对象所做的实际工作。 – user3285982

0

如果你想使用长度,使用deferredPersons.then.length

if (deferredPersons.then.length > 0)

plunkr