在循环内部创建AngularJs中的动态作用域变量。

10 浏览
0 Comments

在循环内部创建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。

当不使用循环,仅用于一个变量时,代码可以正常工作,如下链接所示:

设置动态作用域变量在AngularJs中 - scope.

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

如果有任何线索,将非常棒。谢谢。

0
0 Comments

问题的原因是在使用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=[]。如果出现问题,那么问题可能是在代码中的其他地方引起的。

0
0 Comments

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] = [];

});

那么我应该如何在视图中访问这些数组呢?

0