从ng-repeat数组中过滤掉具有空属性的对象

时间:2017-05-02 09:58:17

标签: javascript angularjs angular-filters

我在范围内有这个数组:

$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

2 个答案:

答案 0 :(得分:4)

我想出的解决方案就是这个。使用ng-if for random.prop2。这适用于prop2不为null / undefined。你的情况如何?对于任何其他过滤,您可以使用其他方法

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

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

  </div>
</div>

答案 1 :(得分:0)

试试这个。

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>