问题 在AngularJs内部循环中创建动态范围变量


我是Angular.js的新手,我正在尝试在for循环中的AngularJs中创建动态范围变量。这是如下:

$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个独立的数组。

任何线索都会很棒。谢谢。


8732
2018-04-18 07:06


起源



答案:


上面的代码抛出一个错误说:$ digest已在进行中。

你已经在控制器和角度范围内了。因此无需使用触发摘要循环 $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] = [];
});

12
2018-04-18 07:22



我应该如何在视图中访问这些数组? - Sagar


答案:


上面的代码抛出一个错误说:$ digest已在进行中。

你已经在控制器和角度范围内了。因此无需使用触发摘要循环 $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] = [];
});

12
2018-04-18 07:22



我应该如何在视图中访问这些数组? - Sagar


你不需要 $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] = [];
}

2
2018-04-18 07:08



我不认为这是他正在寻找的东西,因为他似乎正在寻找这篇文章中定义的方法 stackoverflow.com/questions/18875486/... - m0meni
实际上我正在使用它与角度dragdrop并通过做你所说的抛出错误说TypeError:无法设置属性'jqyoui_pos'的undefined最终意味着$ scope.list是未定义的。 - Vaibhav Magon
@ AR7这看起来正是他正在寻找的东西。这里的结果将是$ scope.list1 = []和$ scope.list2 = []作为2个独立的数组。链接方法适用于考虑点符号的实现。 - KreepN
@Vaibhav不确定您之后是如何使用它的,但上面的代码会创建 $scope.list1 = [], $scope.list2 = [] 没有任何问题。如果你有问题,这意味着它不属于这个问题。 - dfsq