angularFire 从嵌套对象中获取 $id

angularFire get $id from nested object

我有一种情况,我必须嵌套 ng-repeat,当我试图获得第一个 ng-repeat$id 时,我毫无问题地得到了它,但是当我试图获得第二个 ng-repeat$id (下图中标记为红色) i got undefined.

我的Firebase结构如下

这里是 items 对象

HTML代码和控制器在这里

angular
  .module('starter')
  .controller('feedController', function($scope, $firebaseRef, $firebaseArray) {

    $scope.allRequests = $firebaseArray($firebaseRef.requests);

    $scope.allRequests.$loaded(function() {
      console.log(arguments);
    })

  })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<span ng-repeat="items in allRequests">   
    <!-- this works fine -->
      {{items.$id}}
      
      <div ng-repeat="item in items">
        
       <!-- getting undefined here... -->
      {{item.$id}}
      
    </div>
 </span>

我需要 $idng-repeat,任何帮助将不胜感激。

您可以使用 (key, value) 语法遍历您的项目:

<div ng-repeat="(id, item) in items">
  {{id}}
  {{item.userName}}
</div>

发生的事情是 $id$priority 被 angularfire 注入到您发出请求的节点上。它不会将它注入到该节点的所有子节点中,因此您的单个项目没有 $id 属性.

当你调用ng-repeat="item in items"时,由于items是一个对象,angular会遍历你的对象的属性,并默默地忽略以$开头的那些,因为angular 经常在内部使用此前缀。这是 angularfire 利用的副作用(否则,在 item in items 循环中,您将迭代 $id$priority)。 (key, value) in object 语法使您可以访问子对象的键。