我试图在循环运行时禁用某些输入框,然后在完成后启用它。我想用angularjs做这件事。我在循环开始之前将范围变量设置为true,然后在完成时将其设置为false。
执行此操作时,循环期间不会禁用任何内容。它就像它没有消化该函数,直到循环完成后它仍被设置为假。
我也尝试过使用jquery,它也以同样的方式做出反应。
HTML
<input class="form-control" type="text" ng-model="lineToChange.QtyOrd" ng-disabled="disableLinePartial" />
JS
$scope.updateFreight = function (firstLineIndex) {
//jQuery method acts the same
//$("input[ng-disabled='disableLinePartial']").attr("disabled");
$scope.disableLinePartial = true;
angular.forEach($scope.data.SalesOrder.Lines, function (e, i) {
//great functions here
});
$scope.disableLinePartial = false;
};
我是否遗漏了JS解析的内容?什么是更好的方法呢?
答案 0 :(得分:1)
Angular在循环上更新HTML:他们称之为消化循环。您在$ scope上所做的更改未反映在HTML中,而尚未返回updateFreight()函数。
你可以:
1)首先$scope.disableLinePartial = true
2)
$timeout(function() {
// do your loop here
$scope.disableLinePartial = false;
});
$ timeout将允许应用$ scope更改,并且仅在至少一个摘要周期后执行循环。
您可能还想阅读有关$ scope。$ applyAsync()和$ scope。$ evalAsync()
请参阅: http://blog.bguiz.com/post/60397801810/digest-cycles-in-single-page-apps/