Sie können nur einen Ausdruck mit ng-repeat
und keinen interpolated
-Wert verwenden. Um nun eine dynamische wiederholbar Liste zu erstellen, können Sie versuchen, entweder:
- eine Funktion, die eine Liste zurückgibt dynamisch im
ng-repeat
- dies ist möglicherweise teurer, da Winkel Bedarf die Funktion aufgerufen wird zuerst dann festzustellen, ob die Sammlung geändert hat, wenn für eine bestimmte Variable auf dem Umfang, die eine Änderung der Liste auslösen einen $digest
Zyklus
$watch
tun - möglicherweise effizienter, aber wenn Ihre dynamische Liste hängt von mehreren variablen kann es ausführlicher erhalten und kann dazu führen, dass potenzielle Fehler vergessen, neue hinzuzufügen $watch
, wenn eine neue Variable erforderlich
Demo plunker
JS:
app.controller('MainCtrl', function($scope) {
var values1 = [{name:'First'}, {name:'Second'}];
var values2 = [{name:'Third'}, {name:'Fourth'}, {name:'Fifth'}];
//1. function way
$scope.getValues = function(id) {
if(id === 1) {
return values1;
}
if(id === 2) {
return values2;
}
}
//2. watch way
$scope.values = undefined;
$scope.$watch('id', function(newVal) {
$scope.values = $scope.getValues(newVal);
});
});
HTML:
<!-- Here we pass the required value directly to the function -->
<!-- this is not mandatory as you can use other scope variables and/or private variables -->
<ul>
<li ng-repeat="v in getValues(id)">{{v.name}}</li>
</ul>
<!-- Nothing special here, plain old ng-repeat -->
<ul>
<li ng-repeat="v in values">{{v.name}}</li>
</ul>
danke, ich weiß die Syntax aber was ist, wenn Sie den Ausdruck in einer Variablen speichern möchten? – Gilad
Wenn es nur eine (DOM-) Zeichenkette ist, die nicht ausgewertet wird (über $ parse oder $ scope. $ Eval), dann gibt es keine Möglichkeit, dies zu tun. –