angularFire从嵌套对象获取$ id

Aam*_*hah 2 javascript angularjs firebase angularfire

我有一个情况,我必须把嵌套ng-repeat,当我试图得到的$id第一个ng-repeat我没有任何问题,但当我试图获得$id第二个ng-repeat(下图中标记为红色)我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);
    })

  })
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

我需要$id第二ng-repeat,任何帮助将不胜感激.

Von*_*onD 7

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

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

会发生的是,$id并且$priority由您发出请求的节点上的angularfire注入.它不会在此节点的所有子节点中注入它,因此您的各个项目没有$id属性.

当你打电话ng-repeat="item in items",因为items是一个对象,角度会遍历你的对象的属性,并默默地忽略的那些开始$,因为这个前缀通常是由角内部使用.这是angularfire利用的副作用(否则,在你的item in items循环中,你会迭代$id$priority).在(key, value) in object语法,您可以访问你的子对象的关键.