2016-12-16 15 views
2

有兩個實體:我如何巢NG重複與兩個相關實體

  • OrderOpened
  • ProductOrdered有關係:

    關係多對一{ ProductOrdered {訂單}到OrderOpened }

我需要在一個視圖中有相關的產品列出的訂單。

沒有問題,訂單:

<tr ng-repeat="orderOpened in vm.orderOpeneds track by orderOpened.id"> 
    <td><a ui-sref="order-opened-detail({id:orderOpened.id})">{{orderOpened.id}}</a></td> 
    <td> 
     <a ui-sref="desk-detail({id:orderOpened.desk.id})">{{orderOpened.desk.description}}</a> 
    </td> 
    <td>{{orderOpened.openingTime | date:'shortTime'}}</td> 
    <td>{{orderOpened.user.login}}</td> 
    [...] 
</tr> 

但後來我想與此相關的階狀窩產品:

<tr ng-repeat="productOrdered in vm.productOrdereds track by productOrdered.id"> 
    <td><a ui-sref="product-ordered-detail({id:productOrdered.id})">{{productOrdered.id}}</a></td> 
    <td>{{productOrdered.orderedTime | date:'medium'}}</td> 
    [...] 
</tr> 

控制器:

[...] 
function loadAll() { 
    OrderOpened.query(function(result) { 
     vm.orderOpeneds = result; //works 
     angular.forEach(vm.orderOpeneds, function(productOrdered) { 
      TestOrderOpened.query({id:productOrdered.id}, function(result2) { 
       //in java: List<ProductOrdered> productOrdereds = productOrderedRepository.findAllByOrderId(id); 
       vm.productOrdereds = result2; 
      }) 
     }) 
    }); 
} 

在結果我得到的產品僅與angular.forEach的最後一次迭代有關,與當前Order不相關。

如何將productOrdered.id傳遞給ng-repeat指令或使用其他方式在一個視圖中獲取相關實體?

+0

您是否想要像用戶點擊一個訂單那樣動態顯示相關產品?或者您是否希望顯示列表中每個訂單的產品清單? –

回答

0

你得到的結果是正常的: 在你的控制器,你有2只列出了定義:

  • vm.orderOpeneds
  • vm.productOrdereds

有了這個,你只能顯示的productOrdereds一個列表,這恰好是最後一個加載的訂單。

如果要顯示每個訂單的產品列表,您必須將它們存儲在某個地方。幾種解決方案:

1)在每一個加載順序,存儲相關產品,即

function loadAll() { 
    OrderOpened.query(function(result) { 
     vm.orderOpeneds = result; //works 
     angular.forEach(vm.orderOpeneds, function(productOrdered) { 
      TestOrderOpened.query({id:productOrdered.id}, function(result2) { 
       //in java: List<ProductOrdered> productOrdereds = productOrderedRepository.findAllByOrderId(id); 
       // CHANGE: here store the products in the order 
       productOrdered.productOrdereds = result2; 
      }) 
     }) 
    }); 
} 

2)或打造專業化獨立的集合就像一張地圖,它的鍵是訂單ID和值相關聯的列表產品

var productsByOrderId = {} 

function loadAll() { 
    OrderOpened.query(function(result) { 
     vm.orderOpeneds = result; //works 
     angular.forEach(vm.orderOpeneds, function(productOrdered) { 
      TestOrderOpened.query({id:productOrdered.id}, function(result2) { 
       //in java: List<ProductOrdered> productOrdereds = productOrderedRepository.findAllByOrderId(id); 
       // CHANGE: here store the products in the map 
       productsByOrderId[productOrdered.id] = result2; 
      }) 
     }) 
    }); 
} 
0

您可以將產品與您的訂單綁定。

var results = []; 
function loadAll() { 
    OrderOpened.query(function(result) { 
    vm.orderOpeneds = result; //works 
    angular.forEach(vm.orderOpeneds, function(productOrdered) { 
     TestOrderOpened.query({id:productOrdered.id}, function(result2) { 
      // bind your product with orders 
      productOrdered.productOrdereds = result2; 
     // then 
      results.push(productOrdered); 
     }); 
    }); 
    vm.orderOpeneds = results; 
    }); 
}