2015-04-18 11 views
10

Ich bin neu in Angular.js und versuche, dynamische Bereichsvariablen in AngularJs innerhalb einer for-Schleife zu erstellen. Das ist etwas, wie unten:Dynamische Bereichsvariablen in AngularJs innerhalb der Schleife erstellen

$scope.lists=[{listName:'list1'},{listName:'list2'}]; 

for(var i=0;i<$scope.lists.length;i++){ 
    var listName = $scope.lists[i].listName; 
    listName = $parse(listName); 
    listName.assign($scope,[]); 
    $scope.$apply(); 
} 

Der obige Code wirft einen Fehler sagend: $digest bereits im Gange.

Der Code funktioniert ok, wenn sie ohne Looping nur für einen verwendet als getan in: Setting dynamic scope variables in AngularJs - scope.<some_string>

ich schließlich bin für $scope.list1=[] und $scope.list2=[] als 2 separaten Arrays.

Alle Leads wären genial. Vielen Dank.

Antwort

12

The above code throws an error saying: $digest already in progress.

Sie bereits sind in die Steuerung und im Winkelbereich. Daher muss die Digest-Schleife nicht mit $scope.$apply() ausgelöst werden. Auch wenn Sie müssen die $$phase überprüfen und dann anwenden.

if (!$scope.$$phase) $scope.$apply() 

Aber für Ihr Szenario, es ist nicht auf alles, was ich, was er sucht, das ist nicht wahr

$scope.lists = [{listName: 'list1'}, {listName: 'list2'}]; 

angular.forEach($scope.lists, function(item) { 
    var listName = item.listName; 
    $scope[listName] = []; 
}); 
+0

Wie sollte ich auf diese Arrays in Ansichten zugreifen? – Sagar

2

Sie brauchen nicht $parse und assign hier, nur bracket notation verwenden Objekteigenschaft zuzugreifen (weil $scope ist nichts anderes als nur ein Objekt) mit Variablenname:

$scope.lists = [{listName: 'list1'}, {listName: 'list2'}]; 

for (var i = 0; i < $scope.lists.length; i++) { 
    var listName = $scope.lists[i].listName; 
    $scope[listName] = []; 
} 
+1

erforderlich, weil er scheint für die Methodik in diesem Beitrag http definiert gehen zu werden: // stackoverflow.com/questions/18875486/setting-dynamic-scope-variables-in-angularjs-scope-some-string – m0meni

+0

Eigentlich benutze ich es mit eckigen Dragdrop und indem Sie tun, was Ihr Sprichwort löst einen Fehler sagt TypeError: kann Eigenschaft nicht festlegen ' jqyoui_pos 'von undefiniert bedeutet letztlich, dass $ scope.list nicht definiert ist. –

+0

@ AR7 Das sieht genau nach was er sucht. Das Ergebnis ist $ scope.list1 = [] und $ scope.list2 = [] als 2 separate Arrays. Der verknüpfte Ansatz wäre für Implementierungen gedacht, bei denen die Punktnotation berücksichtigt wird. – KreepN

Verwandte Themen