在循环内部创建AngularJs中的动态作用域变量。
在循环内部创建AngularJs中的动态作用域变量。
我刚接触Angular.js,正在尝试在for循环中创建动态作用域变量。代码如下:
$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。
当不使用循环,仅用于一个变量时,代码可以正常工作,如下链接所示:
我最终希望得到$scope.list1=[]
和$scope.list2=[]
作为两个独立的数组。
如果有任何线索,将非常棒。谢谢。
问题的原因是在使用AngularJs中的循环内动态创建作用域变量时出现了错误。解决方法是使用方括号表示法访问对象属性来创建作用域变量。具体代码如下:
$scope.lists = [{listName: 'list1'}, {listName: 'list2'}]; for (var i = 0; i < $scope.lists.length; i++) { var listName = $scope.lists[i].listName; $scope[listName] = []; }
这段代码会根据数组中的对象属性动态创建作用域变量,最终结果是创建了两个独立的数组$scope.list1=[]和$scope.list2=[]。如果出现问题,那么问题可能是在代码中的其他地方引起的。
AngularJS中的动态作用域变量在循环内部创建的问题
在上面的代码中,出现了一个错误,错误信息是:$digest already in progress.
你已经在控制器和angular作用域中,所以没有必要使用$scope.$apply()来触发digest循环。即使必须使用,也必须先检查$$phase然后再应用。
if (!$scope.$$phase) $scope.$apply()
但对于你的场景,完全不需要这样做。
$scope.lists = [{listName: 'list1'}, {listName: 'list2'}];
angular.forEach($scope.lists, function(item) {
var listName = item.listName;
$scope[listName] = [];
});
那么我应该如何在视图中访问这些数组呢?