错误:$ rootScope:infdig无限$ digest循环使用$ http.get()

时间:2017-09-12 15:05:36

标签: html angularjs xmlhttprequest

我的html页面上有一个按钮列表,单击该按钮会在新页面中打开一个URL。但是,一些URL返回http 500错误。所以,如果按钮后面的链接返回https 500错误,我想禁用按钮。这是我的html和angular js代码。实际上,在html代码中,有一个循环用于遍历与特定数据相关的所有资源(由r显示)(使用data-ng-repeat),并检查资源的主要类型,如果它是LINKDOWNLOAD或LINK,如果LINK(r.url)未释放错误,则应出现一个按钮。

要检查url是否发布错误,我使用了isValid(r.url)函数。但是,我得到了无数的这个错误:错误:$ rootScope:infdig Infinite $ digest循环。

我对使用isValid(link)函数的方式做了很多改动。但他们没有成功。有什么帮助吗?我有一个ng-repeat循环时应该怎么做这个任务?

html页面的一部分:

<div class="gn-related-resources"
     data-ng-if="relationFound">
  <h2>{{::title}}</h2>

  <div class=""
       data-ng-repeat="(type, items) in relations track by $index"
       data-ng-if="type && type !== 'thumbnails'">
    <div class="row list-group-item gn-related-item"
         data-ng-repeat="r in items track by $index"
         data-ng-init="mainType = config.getType(r, type);">
       <div class="col-xs-4" data-ng-if="mainType === 'LINKDOWNLOAD' || mainType === 'LINK'" >
        {{isValid(r.url)}}
        <button type="button"
                class="btn btn-default btn-sm btn-block"
                data-ng-show="isValid(r.url)"
                data-ng-click="config.doAction(mainType, r, md)">

        <span class="visible-lg-*">
          {{::(config.getLabel(mainType, type)) | translate}}
        </span>
        </button>
      </div>
    </div>
  </div>
</div>

angularjs指令的一部分:

  module
  .directive(
      'gnRelated',
      ['gnRelatedService',
    'gnGlobalSettings',
    'gnRelatedResources',
    function( gnRelatedService, gnGlobalSettings, gnRelatedResources) {
      return {
        restrict: 'A',
        templateUrl: function(elem, attrs) {
          return attrs.template ||
                  '../../catalog/components/metadataactions/partials/related.html';
        },
        scope: {
          md: '=gnRelated',
          template: '@',
          types: '@',
          title: '@',
          list: '@',
          user: '=',
          hasResults: '=?'
        },

        link: function(scope, element, attrs, controller) {

          var promise;
          scope.updateRelations = function() {
            scope.relations = [];
            if (scope.uuid) {
              scope.relationFound = false;
              (promise = gnRelatedService.get(
                 scope.uuid, scope.types)
              ).then(function(data) {
                   scope.relations = data;
                   angular.forEach(data, function(value) {
                     if (value) {
                       scope.relationFound = true;
                       scope.hasResults = true;
                     }
                   });
                 });
            }
          };

1 个答案:

答案 0 :(得分:1)

我强烈建议你永远不要做这些事情:TIdTCPServer

TBitmap.SaveTo...()

您调用异步调用的每个摘要周期

你有{{isValid(r.url)}}列表,创建所有的Promise,a.e。 scope.isValid = function(link) { $http.get(link).then( function(success) { return true; }, function(error) { return false; }); }; 并分别渲染结果。

相反relations我会写一些类似的东西:

$q.all([])

运行所有请求后将创建isValid(r.url)