我正在构建一个简单的角度应用来处理客户的订单
在每个订单中,我存储客户的ID,而不是整个客户的数据(非规范化是o.k.,但是...... :-)。
我不知道如何呈现订单列表(使用ng-repeat
),也显示客户的名字......
我的(firebase)数据结构如下:
+ myapproot
+ customers
+ -JT5by1W6hylwsbVcfFg
- name = "Alice"
- ...
+ ...
+ orders
+ -JUUcRPpWnoyeXzklo9V
- customerId = "-JT5by1W6hylwsbVcfFg"
- date = "2014-08-16T16:23:47.047Z"
- amount = "100"
- ...
+ ...
我的观点是这样的:
<table>
<tr ng-repeat="(orderId, order) in orders | orderByPriority">
<td title="Date of order">
{{ order.date | date: 'dd MMMM yyyy HH:mm' }}
</td>
<td title="Customer name">
{{ ??? }}
</td>
...
</tr>
</table>
我的控制器是这样的:
app.controller('OrdersCtrl', function ($scope, Order, Customer) {
$scope.order = {};
$scope.orders = Order.all;
...
}
更新 : 答案来自'Sunil D.'是正确的,接受了。 这是我的略微修改版本,因为我没有将客户的ID存储在客户数据中(我从父键获取id),并且我想跳过非对象元素:
$scope.customersById = {};
$scope.customers = Customer.all;
$scope.customers.$on('loaded', function() {
angular.forEach($scope.customers, function(customer, id) {
if (typeof customer === 'object') {
$scope.customersById[id] = customer;
}
});
});
答案 0 :(得分:2)
您可以构建客户哈希并在视图中引用它:
$scope.customersById = {};
angular.forEach($scope.customers, function(customer) {
$scope.customersById[customer.id] = customer;
});
<td title="Customer name">
{{customersById[order.customerId].name}}
</td>