【问题标题】:Angular JS infinite loop on checkbox ng-click with $http request带有 $http 请求的复选框 ng-click 上的 Angular JS 无限循环
【发布时间】:2015-09-27 16:19:20
【问题描述】:

我在 $http 请求上遇到了无限循环问题。不知何故,它仅在复选框上变为无限,因为我正在更改附加到此复选框的变量的模型值。代码如下:

<div ng-repeat="contract in contracts">
      <select ng-model="contract.name" ng-change="getTransliteratedMessage()"/>
      <div ng-repeat="additionalContract in contract.additionalContracts">
          <input type="text" ng-model="additionalContract.name"/>
          <input type="checkbox" id="myCheckbox" ng-model="additionalContract.isMessage" ng-click="getTransliteratedMessage()"/>
          <label for="myCheckbox">Some msg</label>
      </div>
</div>
<textarea ng-model="transliteratedText"/>

这里是控制器方法:

$scope.getTransliteratedMessage = function() {
   var transliterationPromises = [];
   angular.forEach($scope.contracts, function(contract) {
       transliterationPromises.push($http({method: 'GET', url: 'some/url', params: contract.name});
       angular.forEach(contract.additionalContracts, function(addContract) {
           if (addContract.isMessage) {
                transliterationPromises.push($http({method: 'GET', url: 'some/url', params: addContract.name});
           }
       });
   });
   $q.all(transliterationPromises).then(function(results) {
       angular.forEach(results, function(result) {
           $scope.transliteratedText = $scope.transliteratedText + ' ' + result.data;
       }
   }
}

所以,问题来了——当我更改第一个合同

【问题讨论】:

  • 我不太确定,你的代码有点混乱,但我的第一个猜测是你的 ng-repeat 生成的每个复选框都有相同的模型,因此你的 foreach 正在循环通过额外的合同和每次它为每个复选框推送 http 请求,因此通过单击 1 个复选框,您实际上会更改所有内容,但这只是我不太确定的猜测
  • 只用一个复选框就完成了 - 仍然存在问题
  • 那么我不太确定只是使用一些 console.logs 来确定循环发生的位置,我在你的代码中唯一看到的是你在 forEach 之后缺少一些)

标签: javascript arrays angularjs rest checkbox


【解决方案1】:

嗯,问题出在其他地方的函数调用不正确,我认为这是没有必要的。我将函数作为参数发送,例如

<my-directive my-attribute="getTransliteratedMessage()" .../>

但我需要不带括号发送 (my-attribute="getTransliteratedMessage")

对不起,愚蠢的问题,希望这对将来的人有所帮助。

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2013-12-15
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2016-01-30
    • 1970-01-01
    相关资源
    最近更新 更多