Создание динамических переменных области в 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 отдельных массива.
Любые выводы были бы замечательными. Спасибо.
Ответы
Ответ 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] = [];
}