I don't really understand how
track byto track strings & duplicate values
ng-repeat tracks each item by the item itself. For the given array
objs = [ 'one', 'one', 2, 'five', 'string', 'foo'],
ng-repeat attempts to track changes by each
obj in the
ng-repeat="obj in objs". The problem is that we have duplicate values and angular will throw an error. One way to solve that is to have angular track the objects by other means. For strings,
track by $index is a good solution as you really haven't other means to track a string.
track by& triggering a digest & input focuses
You allude to the fact you're somewhat new to angular. A digest is another way of saying a changes manifest in angular based on changes that occur through triggering actions. You click a button to update a model via
ng-click, that registers that change in the digest cycle. I'm not too articulate in explaining that so you should investigate further if that didn't clarify things.
So back to
track by. Let's use an example:
How you track this object will determine how the UI reflects the change.
One of the most annoying UXs I've experienced is this. Say you have a table of objects, each cell has an input where you want to in-line edit those objects' properties. I want to change the value, then
on-blur, save that object while moving to the next cell to edit while you might be waiting on the response. So this is an autosave type thing. Depending on how you setup your
track by statement, you may lose current focus (e.g. the field you're currently editing) when the response gets written back into your array of objects.