使用ng-init和异步操作

时间:2016-07-18 15:26:54

标签: angularjs

是否可以使用ng-init在ng-repeat中进行异步调用?

例如,请考虑以下事项:

<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;
    }); 
}

这对我不起作用,因为我的第二个detail.itemName中的md-list-item没有解决任何问题,但我可以看到网络请求,如果我在函数调用中添加断点,我会查看随itemName属性返回的订单明细。

使用ng-init是否存在限制,阻止其正在重新评估异步操作?

由于

1 个答案:

答案 0 :(得分:0)

在那里,我可以看到实施的错误

  1. 另一个错误的事情是你不应该在这种情况下使用ng-init
  2. 这不是你如何使它工作,就像你正在考虑的那样,从promise返回的数据将直接放在一个变量中。
  3. 当我获得数据时,我会拨打这些电话。将数据放在该元素的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>