2015-04-18 13 views
10

Sono nuovo in Angular.js e sto cercando di creare variabili di ambito dinamiche in AngularJs all'interno di un ciclo for. Questa è una cosa, come di seguito:Creare variabili di ambito dinamiche in AngularJs all'interno del ciclo

$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(); 
} 

Il codice precedente genera un errore dicendo: $digest già in corso.

Il codice funziona bene se usato senza loop solo per uno come fatto in: Setting dynamic scope variables in AngularJs - scope.<some_string>

che in ultima analisi, sono alla ricerca di $scope.list1=[] e $scope.list2=[] come 2 array separati.

Qualsiasi contatto sarebbe fantastico. Grazie.

risposta

12

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

Sei già il controller e in ambito angolare. Quindi non è necessario attivare il ciclo digest utilizzando $scope.$apply(). Anche se devi controllare lo $$phase e poi applicare.

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

Ma per lo scenario, non è richiesto a tutti

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

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

come devo accedere a quegli array nelle viste? – Sagar

2

Non è necessario $parse e assign qui, basta usare bracket notation per accedere proprietà di un oggetto (perché $scope non è altro che solo un oggetto) con nome di variabile:

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

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

Non penso che è quello che sta cercando, perché sembra andare per la metodologia definita in questo post http: // stackoverflow.com/questions/18875486/setting-dynamic-scope-variables-in-angularjs-scope-some-string – m0meni

+0

In realtà lo utilizzo con dragdrop angolare e facendo ciò che si dice genera un errore che dice TypeError: Can not set property ' jqyoui_pos 'di non definito, in definitiva, significa che $ scope.list non è definito. –

+0

@ AR7 Sembra esattamente quello che sta cercando. Il risultato qui sarà $ scope.list1 = [] e $ scope.list2 = [] come 2 array separati. L'approccio collegato sarebbe per le implementazioni in cui viene presa in considerazione la notazione a punti. – KreepN

Problemi correlati