Javascript函数未按预期执行

时间:2015-11-18 16:27:53

标签: javascript jquery angularjs

我试图在循环运行时禁用某些输入框,然后在完成后启用它。我想用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解析的内容?什么是更好的方法呢?

1 个答案:

答案 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/