Angular:如何从外部类访问对象的属性(在ng-repeat中)?

时间:2014-08-17 10:06:28

标签: angularjs angularfire

我正在构建一个简单的角度应用来处理客户的订单 在每个订单中,我存储客户的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;
    }
  });
});

1 个答案:

答案 0 :(得分:2)

您可以构建客户哈希并在视图中引用它:

$scope.customersById = {};

angular.forEach($scope.customers, function(customer) {
   $scope.customersById[customer.id] = customer;
});

<td title="Customer name">
    {{customersById[order.customerId].name}}
</td>