【问题标题】:Filtering out objects with empty property from ng-repeat array从 ng-repeat 数组中过滤出具有空属性的对象
【发布时间】:2017-05-02 09:58:17
【问题描述】:

我有这个数组在范围内:

$scope.randomArray = [
      {
        prop1: 'val1',
        prop2: {
          value: '3',
          unit: 'l'
        }
      },
      {
        prop1: 'val2'
      },
      {
        prop1: 'val3',
        prop2: {
          value: '10',
          unit: 'l'
        }
      }
    ];

尝试仅对具有prop2 属性集的对象进行 ng-repeat。如果没有必要,我不会为此创建单独的过滤器或范围函数,因此我尝试了描述herehere 的解决方案:

<div ng-repeat="random in randomArray | filter : { prop2 : '!!'}">
  {{random}}
  </div>

但它不起作用。

这里是 mcve:https://codepen.io/neptune01/pen/eWRBKd

【问题讨论】:

  • 所有评论者,不适用于 Angular V1.3 及更高版本。 OP 的 qn 有效
  • 简单的答案。使用 ng-if..

标签: javascript angularjs angular-filters


【解决方案1】:

我想出的解决方案是这个。使用 ng-if 表示 random.prop2。这适用于 prop2 不为空/未定义的情况。这是你的情况。对于任何其他过滤,您可以使用其他方法

<div ng-app="app">
<div ng-controller="appCtrl">

  <div ng-repeat="random in randomArray" ng-if="random.prop2">
  {{random}}
  </div>

  </div>
</div>

【讨论】:

    【解决方案2】:

    试试这个。

    var app = angular.module('app', [])
    .controller('appCtrl', ['$scope',
      function($scope) {
        $scope.randomArray = [
          {
            prop1: 'val1',
            prop2: {
              value: '3',
              unit: 'l'
            }
          },
          {
            prop1: 'val2'
          },
          {
            prop1: 'val3',
            prop2: {
              value: '10',
              unit: 'l'
            }
          }
        ];
      }]);
      app.filter('check', function() {
      return function(items, tagName) {
        var filtered = [];
        angular.forEach(items, function(el) {
          if(el['prop2'] != undefined) {
            filtered.push(el);
          }
        });
        return filtered;
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.min.js"></script>
    
    <div ng-app="app">
    <div ng-controller="appCtrl">
                 
      <div ng-repeat="random in randomArray | check:'prop2'">
      {{random}}
      </div>
      
      </div>
    </div>

    【讨论】:

    • OP 说他不需要为此使用另一个自定义过滤器。
    • @JinsPeter OP 没有说he does not need another custom filter ..,但他说if not necessary。请再读一遍!
    • 没有必要。使用 ng-if 轻松实现
    • 我认为使用ng-if 指令的成本很高。
    猜你喜欢
    • 2015-07-03
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多