使用角度过滤器使用空占位符填充集合,获得$ digest无限循环错误

时间:2016-04-13 20:32:46

标签: javascript angularjs ng-repeat angular-filters

我们要求用户必须从集合中选择 n 记录。 UI必须为每个 n 记录显示空占位符,直到每个记录都被填充。为了解决这个问题,我试图使用一个过滤器来填充#34;带有空占位符的所选子集。但是,过滤器导致无限的$ digest周期,我不理解为什么或如何解决它。无论如何,考虑到2个选项的要求,我的过滤器可能看起来像这样......

angular
  .module('TestApp', [])
  .filter('selectedFltr', function() {
    return function(items) {
      switch (items.length) {
        case 0:
          // No selections, return two empty placeholders
          return [{}, {}];
        case 1:
          // One selection, return it plus 1 empty placeholder
          return [items[0], {}];
        default:
          // Return all selections
          return items;
      }
    };
  });
<!-- Full collection -->
<div ng-repeat="item in ctrl.items" ng-click="item.$selected=true">
  {{item.id}}
</div>

<!-- Selected subset -->
<span ng-repeat="item in ctrl.items | filter:{$selected:true} | selectedFltr">
  {{item.id}}
</span>

我的例子是为了简单而设计的。例如,过滤器可能接受长度参数并动态构建结果集合。我意识到我可以将各种ng-ifng-show / ng-hide逻辑转储到视图中来解决这个问题,但这感觉有点清洁......如果我能让它工作的话。如果您有更好的解决方案,我可以提出建议!

Here's an almost working example(plnkr)我想要做的事情......

0 个答案:

没有答案