2016-04-14 8 views
2

Ich habe eine Situation, wo ich verschachtelte ng-repeat setzen muß, wenn ich die $id des ersten ng-repeat zu bekommen versuchen, habe ich es ohne Probleme, aber wenn ich versuche, die $id von Sekunde zu bekommen ng-repeat (in der Abbildung rot markiert) i got undefined.

meine Firebase Struktur ist wie

enter image description here

folgt hier

ist items Objekt items object

HTML-Code und Regler sind hier

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>

Ich brauche $id von zweiten ng-repeat, jede Hilfe wird geschätzt.

+0

Können Sie ein Beispiel dafür zeigen, wie 'Artikel' aussehen? – VonD

+0

@VonD Ich aktualisierte meine Frage, siehe 'Artikel' –

+0

ein wenig offtopic Ratschlag: Sie sollten nicht Blockelemente wie' div' innerhalb von Inline-Elementen wie 'span' – Lulylulu

Antwort

7

können Sie die (key, value) Syntax verwenden, um Ihre Produkte zu iterieren:

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

Was passiert, ist, dass die $id und $priority von angularfire auf dem Knoten injiziert werden, auf dem Sie den Antrag gestellt hat. Es injiziert es nicht in alle Unterknoten dieses Knotens, sodass Ihre einzelnen Elemente keine $id-Eigenschaft besitzen.

Wenn Sie ng-repeat="item in items" nennen, wie items ist ein Objekt, Winkel über Eigenschaften laufen wird, Ihr Objekt und leise diejenigen ignorieren mit $ beginnen, da dieser Präfix oft intern durch Winkel verwendet wird. Dies ist ein Nebeneffekt, den anglefire ausnutzt (andernfalls würden Sie in Ihrer item in items-Schleife über $id und $priority iterieren). Die (key, value) in object Syntax gibt Ihnen Zugriff auf den Schlüssel Ihres untergeordneten Objekts.

+0

Was für eine großartige Erklärung. hat für mich gearbeitet, danke :) –

+0

Immer gefragt, warum das funktioniert. Danke für die tolle Erklärung! –