Het NGREPEAT ‘TRACK door’ expressie

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 $indexAls 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 bywordt gebruikt om uw gegevens te koppelen aan de DOM-generatie (en voornamelijk regeneratie) gemaakt door ng-repeat.

wanneer je track bytoevoegt, 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-repeatlijst.

meestal, zonder track byzal 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.

Other episodes