Loading...
Improve this Doc
Error: error:trkslct
Error: error:trkslct
Comprehension expression cannot contain both `select as` and `track by` expressions.
Description
NOTE: This error was introduced in 1.3.0-rc.5, and was removed for 1.3.0-rc.6 in order to not break existing apps.
This error occurs when 'ngOptions' is passed a comprehension expression that contains both a
select as
expression and a track by
expression. These two expressions are fundamentally
incompatible.
- Example of bad expression:
<select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItem'}}]
,$scope.selected = {name: 'aSubItem'};
- track by is always applied to
value
, with purpose to preserve the selection, (toitem
in this case) - To calculate whether an item is selected,
ngOptions
does the following:- apply
track by
to the values in the array: In the example: [1,2] - apply
track by
to the already selected value inngModel
: In the example: this is not possible, astrack by
refers toitem.id
, but the selected value fromngModel
is{name: aSubItem}
.
- apply
Here's an example of how to make this example work by using track by
without select as
:
<select ng-model="selected" ng-options="item.label for item in values track by item.id">
Note: This would store the whole item
as the model to scope.selected
instead of item.subItem
.
For more information on valid expression syntax, see 'ngOptions' in select directive docs.