我发现自从以角度构建应用程序后,我需要手动将页面更新到我的范围.
我知道这样做的唯一方法是$apply()从我的控制器和指令的范围调用.这个问题是它不断向控制台抛出一个错误:
错误:$ digest已在进行中
有谁知道如何避免这个错误或以不同的方式实现相同的事情?
我想这个标题非常清楚我要问的是什么.我创造了这个小提琴:http://jsfiddle.net/Sourabh_/HB7LU/13142/
在小提琴中,我试图复制一个async场景.这只是一个例子,但在AJAX调用中如果我不使用$scope.$apply()该列表则不会更新.我想知道$scope.$apply()每次进行AJAX调用更新列表时是否安全使用,还是有其他一些我可以使用的机制?
我编写的代码用于复制场景(与小提琴相同):
HTML
<div ng-controller="MyCtrl">
<li ng-repeat="item in items">
{{item.name}}
</li>
<button ng-click="change()">Change</button>
</div>
Run Code Online (Sandbox Code Playgroud)
JS
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.items = [{name : "abc"},{name : "xyz"},{name : "cde"}];
$scope.change = function(){
test(function(testItem){
$scope.items = testItem;
//$scope.$apply();
})
}
function test(callback){
var testItem = [
{name : "mno"},
{name : "pqr"},
{name : "ste"}
];
setTimeout(function(){callback(testItem)},2000);
}
}
Run Code Online (Sandbox Code Playgroud) 我是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();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出一个错误说:$digest已经在进行中.
代码在没有循环的情况下正常使用,如下所示: 在AngularJs中设置动态范围变量 - 范围.<some_string>
我最终正在寻找$scope.list1=[]和$scope.list2=[]作为2个独立的阵列.
任何线索都会很棒.谢谢.