【发布时间】:2015-10-19 03:52:27
【问题描述】:
我有一个包含一些测试的数组,我必须按顺序运行。
在一个角度 forEach 循环中,我正在迭代测试数组并通过 http get 调用后端来启动当前测试。
我现在的问题是,用户应该可以停止测试运行,以便不再执行进一步的测试。
在视图中,我有一个“停止测试运行”按钮,它将 $scope.stopTest 变量设置为 true。在我的 foreach 循环中,我有一个条件,它在每次迭代时检查 $scope.stopTest 变量,如果它设置为 true,则跳过测试运行。
但似乎,循环角内部无法识别范围变量从假到真的变化。
我在循环中有一个测试输出,显示该值仍然为假。
在我看来,我有这些按钮:
<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(),但没有任何效果。
如何通过按钮单击事件停止循环?
【问题讨论】:
标签: javascript angularjs foreach