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

时间:2015-04-18 07:06:36

标签: javascript 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已在进行中。

代码在没有循环使用时正常工作,如下所示: Setting dynamic scope variables in AngularJs - scope.<some_string>

我最终希望将$scope.list1=[]$scope.list2=[]作为2个独立的数组。

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

2 个答案:

答案 0 :(得分:12)

  

上面的代码抛出错误说:$ 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] = [];
});

答案 1 :(得分:2)

这里你不需要$parseassign,只需使用bracket notation来访问对象属性(因为$scope只是一个对象)名:

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

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