我是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个独立的数组。
任何线索都会很棒。谢谢。
上面的代码抛出一个错误说:$ 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] = [];
});
上面的代码抛出一个错误说:$ 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] = [];
});
你不需要 $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] = [];
}