Ik heb moeilijkheden die begrijpen hoe het track door expressie van NG-REPEAT in Angularjs werkt. De documentatie is erg schaars: http://docs.angularjs.org/api/ng/directive / ngreat
Kun je uitleggen wat het verschil tussen die twee fragmenten van de code is in termen van databinden en andere relevante aspecten?
Met: track by $index
<!--names is an array-->
<div ng-repeat="(key, value) in names track by $index">
<input ng-model="value[key]">
</div>
zonder (dezelfde uitvoer)
<!--names is an array-->
<div ng-repeat="(key, value) in names">
<input ng-model="value[key]">
</div>
Antwoord 1, Autoriteit 100%
U kunt track by $index
Als uw gegevensbron dubbele ID’s heeft
EG: $scope.dataSource: [{id:1,name:'one'}, {id:1,name:'one too'}, {id:2,name:'two'}]
U kunt deze verzameling niet herhalen tijdens het gebruik van ‘ID’ als ID (dubbele ID: 1).
werkt niet:
<element ng-repeat="item.id as item.name for item in dataSource">
// something with item ...
</element>
Maar u kunt, bij gebruik van track by $index
:
<element ng-repeat="item in dataSource track by $index">
// something with item ...
</element>
Antwoord 2, autoriteit 64%
een korte samenvatting:
track by
wordt gebruikt om uw gegevens te koppelen aan de DOM-generatie (en voornamelijk regeneratie) gemaakt door ng-repeat.
wanneer je track by
toevoegt, zeg je in feite tegen angular om een enkel DOM-element per data-object in de gegeven verzameling te genereren
dit kan handig zijn bij het bladeren en filteren, of in elk geval waarbij objecten worden toegevoegd aan of verwijderd uit de ng-repeat
lijst.
meestal, zonder track by
zal angular de DOM-objecten aan de collectie koppelen door een expando-eigenschap – $$hashKey
– in uw JavaScript-objecten te injecteren en deze opnieuw te genereren (en een DOM-object opnieuw koppelen) bij elke wijziging.
volledige uitleg:
http: //www.bennadel.com/blog/2556-using-track-by-with-ngrepeat-in-angularjs-1-2.htm
een meer praktische gids:
http://www .codelord.net/2014/04/15/improving-ng-repeat-performance-with-track-by/
(track by is beschikbaar in hoekig > 1.2 )
Antwoord 3, autoriteit 8%
Als u met objecten werkt die volgen op de identifier(bijv. $index) in plaats van het hele object en u uw gegevens later opnieuw laadt, zal ngRepeat de DOM-elementen niet opnieuw opbouwenvoor items is het al weergegeven, zelfs als de JavaScript-objecten in de collectie zijn vervangen door nieuwe.