2016-07-18 51 views
0

是否可以使用ng-init在ng-repeat内部进行异步调用?使用ng-init与异步操作

例如考虑以下因素:

<div ng-repeat="order in orders"> 
    <md-list> 
     <md-list-item> 
      {{order.id}} 
     </md-list-item> 

     <md-list-item ng-init="detail = getOrderDetail(order.id)"> 
      {{detail.itemName}} 
     </md-list-item> 
    </md-list 
</div> 

我想调用一个函数为每个项目被一再重复这会去通过HTTP获取一些额外的数据。

所以在我的getOrderDetail我有一些这样的事情:

function getOrderDetail(id) { 
    return myService.getOrderDetails(id).then(function(orderDetail){ 
     return orderDetail; 
    }); 
} 

在我的第二md-list-item对我来说,这并不工作,为detail.itemName不能解决任何事情,但我可以看到对网络提出要求如果我在函数调用中添加断点,我会看到itemName属性出现时返回的订单明细。

使用ng-init时,是否存在限制,以防止其工作重新评估异步操作?

感谢

+0

使用ng-init这里没有意义。 –

回答

0

在那里,我可以看到几件事情错实现

  1. 另一个错误的事情是,你不应该使用ng-init这种情况
  2. 这不是你如何使它工作,就像你正在考虑的那样,从promise中返回的数据将直接放入一个变量中。

我会想办法让那些通话时,我得到的数据&将数据放在该元素的order对象,这样我可以从特定的顺序仅

angular.forEach(orders, function(order){ 
    getOrderDetail(id).then(function(response){ 
     order.detail = response; 
    }) 
}); 

HTML

后来抓细节
<div ng-repeat="order in orders"> 
    <md-list> 
     <md-list-item> 
      {{order.id}} 
     </md-list-item> 
     <md-list-item> 
      {{order.detail.itemName}} 
     </md-list-item> 
    </md-list> 
</div> 
+0

Downvoter能否请你解释一下在评论中写下为什么downvote?如果您感觉有问题,请发表评论,我会很感激。此外,同样会帮助我进一步提高.. –

+0

@KevinB感谢您的领导先生,但背后downvote的原因是? –

+0

谢谢 - 我确实已经完成了这样的事情,这更多的是这个ng-init的使用是否可行并且您已经回答了合适的问题。 – mindparse