Angular不会识别forEach循环中的作用域变量变化
Angular does not recognize scope variable change within forEach loop
我有一个包含一些测试的数组,我必须依次运行这些测试。
在一个角forEach循环中,我迭代测试数组并通过http get调用后端来启动当前测试。
我现在的问题是,用户应该有可能停止测试运行,以便不再执行进一步的测试。在视图中,我有一个"停止测试运行"按钮,它设置了一个$scope。stopTest变量设置为true。在我的foreach循环中,我有一个检查$作用域的条件。stopTest变量,如果设置为true,则跳过测试运行。
但似乎,在循环内部,angular无法识别作用域变量从false变为true。我在循环中有一个测试输出,它告诉我值仍然为false。
在我的视图中,我有这些按钮:
<input type="button" class="btn" ng-click="runTests()" value="Start test run" ng-disabled="disabled == true" />
<input type="button" class="btn" ng-click="stopRunning = true" value="Stop test run" />
在我的控制器中,我有这样的代码:
$scope.runTests = function () {
angular.forEach($scope.selected, function (value, key) {
if (!$scope.stopRunning) { // PROBLEM: angular does not recognize that stopRunning has changed already
promise = promise.then(function () {
$scope.count++;
$scope.status = "Running test " + $scope.count + " of " + $scope.countSelectedTests + ".";
return $http({
method: 'GET',
url: 'api/runtest/' + key
}).then(function (res) {
$scope.testresults = res.data;
});
});
}
});
有谁知道这里有什么问题吗?是关于子作用域还是消化周期?我试图在改变stopRunning变量后调用$apply()或$digest(),但没有效果。
如何通过按钮点击事件停止循环?
我很确定问题*来自angular的forEach。你们见过这个问题吗?
好吧,不用了。我认为问题在于你的循环发生得太快了。它循环遍历所有"选定"元素,并在您甚至可以单击停止按钮之前启动所有查询。如果您想要链式调用,请编写一个递归函数来执行调用,并在返回时为下一个元素调用自身。这样,每个http调用都将在前一个调用完成后启动,您将有时间中断该进程。
function callForEach(selected, i){
if(i < selected.length){
var item = selected(i);
$http({
method: 'GET',
url: 'api/runtest/' + key
}).then(function (res) {
$scope.testresults = res.data;
if(!$scope.stopRunning){
callForEach(selected, i+1);
}
});
}
}
相关文章:
- 当我更新另一个作用域变量时,作用域变量会自动更新
- 如何在隔离作用域指令中访问此作用域变量
- 正在向构造函数添加作用域变量
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 作用域变量未从状态父控制器继承到子控制器
- 插槽:访问作用域变量
- 在另一个作用域变量中使用AngularJS作用域变量
- 在Angular.js中通过检查作用域变量进行过滤
- 如何更新作为属性传入的作用域变量
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- 从$http.get调用更新Angular作用域变量
- AngularJS ui路由器:访问子作用域变量
- 访问AngularJS中函数中的作用域变量
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 修改作用域变量后,未更新作用域绑定
- 控制器作用域变量在刷新之前未加载
- 将Angular作用域变量的字符串描述传递给指令
- 将内部作用域变量绑定到外部“模板”
- 无法在 $.post 回调中设置作用域变量
- 如何从在 JS 中用作参数的匿名函数中分配外部作用域变量