I'm trying to do something like this:
<ul>
<li ng-repeat="{{myRepeatExpression}}">{{row.name}}</li>
</ul>
But because the ng-repeat
logic is in the compile state of the directive it treats the {{myRepeatExpression}}
as a normal string instead of a variable. Which doesn't work, obviously.
Is there any workaround for that?
ng-repeat
only accepts it proprietary expression syntax as inrow in rows
, butrows
could be a function or promise in your controller. However you need to watch performance closely as ng-repeat doesn't work well with things that change too often (the dreaded max. 10 iterations error).You can only use and expression with
ng-repeat
and not aninterpolated
value. Now in order to create a dynamic repeatable list you can try either:ng-repeat
- this is potentially more expensive since angular needs to call the function first then determine if the collection has changed when doing a$digest
cycle$watch
for a particular variable on the scope that trigger a change of the list - potentially more efficient but if your dynamic list depends on more than one variable it can get more verbose and can lead to potential bugs from forgetting to add a new$watch
when a new variable is requiredDemo plunker
JS:
HTML:
You can't use ng-repeat with string/variable that should represent the expression directly, but you can create directive that interpolate/parse this value and pass it to the ng-repeat argument and recompile the element.
Take a look at this plunker: demo plunker from accepted answer
Also please note, that this approach should cause troubles in nested ng-repeats.