我是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个独立的数组。
任何线索都会很棒。感谢。
答案 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)
这里你不需要$parse
和assign
,只需使用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] = [];
}