Подтвердить что ты не робот

Создание динамических переменных области в AngularJs внутри цикла

Я новичок в Angular.js и пытаюсь создать динамические переменные области в AngularJs внутри a for Loop. Это что-то вроде ниже:

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

Вышеприведенный код вызывает ошибку: $digest уже выполняется.

Код работает нормально, когда используется без цикла только для одного, как это сделано в: Установка динамических переменных области в AngularJs - область. <some_string >

В конечном итоге я ищу $scope.list1=[] и $scope.list2=[] как 2 отдельных массива.

Любые выводы были бы замечательными. Спасибо.

4b9b3361

Ответ 1

В приведенном выше коде выдается сообщение об ошибке: $digest уже выполняется.

Вы уже находитесь в контроллере и в области angular. Поэтому нет необходимости запускать цикл дайджеста с помощью $scope.$apply(). Даже если вам нужно проверить $$phase, а затем применить.

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

Но для вашего сценария это вообще не требуется

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

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

Ответ 2

Здесь вам не нужны $parse и assign, просто используйте ноту привязки для доступа к объекту (поскольку $scope ничего, кроме всего лишь объекта) с именем переменной:

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

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