AngularJS orderBy does not work with track by in ngOptions?

In order to use tracking with filters, the track by expression needs to be added after the filter.

Try this instead:

user.id as user.name for user in users | orderBy: 'name' track by user.id

The documentation for ngRepeat mentions this under the "Arguments" section, specifically:

Filters should be applied to the expression, before specifying a tracking expression.

and

For example: item in items | filter:searchText track by item.id is a pattern that might be used to apply a filter to items in conjunction with a tracking expression.