Den ngRepeat 'track by' Ausdruck verstehen
Ich habe Schwierigkeiten zu verstehen, wie die track von expression von ng-repeat in angularjs funktioniert. Die Dokumentation ist sehr knapp: http://docs.angularjs.org/api/ng/directive/ngRepeat
Können Sie erklären, was der Unterschied zwischen diesen beiden code-Schnipsel ist in Bezug auf databinding und andere relevante Aspekte?
mit: track by $index
<!--names is an array-->
<div ng-repeat="(key, value) in names track by $index">
<input ng-model="value[key]">
</div>
ohne (gleiche Ausgabe)
<!--names is an array-->
<div ng-repeat="(key, value) in names">
<input ng-model="value[key]">
</div>
InformationsquelleAutor der Frage Jonathan Grupp | 2014-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
track by $index
wenn Ihre Datenquelle hat doppelte Bezeichnerz.B.:
$scope.dataSource: [{id:1,name:'one'}, {id:1,name:'one too'}, {id:2,name:'two'}]
Können Sie nicht Durchlaufen, diese Sammlung, während mit 'id' als Bezeichner (doppelte id:1).
NICHT:
aber Sie können, wenn Sie mit
track by $index
:InformationsquelleAutor der Antwort nilsK
eine kurze Zusammenfassung:
track by
wird verwendet, um die Verknüpfung Ihrer Daten mit dem DOM-generation (und vor allem re-generation) gemacht, die durch ng-repeat.beim hinzufügen
track by
Sie im Grunde sagen, Winkel-generiert eine einzelne DOM element pro Daten-Objekt in der angegebenen Sammlungdies könnte nützlich sein, wenn paging und filtern, oder in jedem Fall, wenn Objekte Hinzugefügt oder entfernt werden aus
ng-repeat
Liste.in der Regel, ohne
track by
Winkel-link dem-DOM-Objekte mit der Sammlung durch die Injektion eine expando-Eigenschaft -$$hashKey
- in Ihre JavaScript-Objekte, und regeneriert wird (und re-associate ein DOM-Objekt) mit jeder änderung.vollständige Erklärung:
http://www.bennadel.com/blog/2556-using-track-by-with-ngrepeat-in-angularjs-1-2.htm
ein praktischer Leitfaden:
http://www.codelord.net/2014/04/15/improving-ng-repeat-performance-with-track-by/
(track by steht in den Winkel - > 1.2 )
InformationsquelleAutor der Antwort nurinur
Wenn Sie mit Objekten arbeiten track mit der Kennung(z.B. $index), anstatt das gesamte Objekt und laden Sie Ihre Daten später, ngRepeat nicht den Wiederaufbau der DOM-Elemente für Elemente es hat bereits erbrachteauch wenn die JavaScript-Objekte in der Sammlung wurden ersetzt durch neue.
InformationsquelleAutor der Antwort ram1993