【问题标题】:How to filter and object based on fields values using a filter with ng-repeat如何使用带有 ng-repeat 的过滤器根据字段值过滤和对象
【发布时间】:2015-01-14 03:33:47
【问题描述】:

我正在使用 Angular 并且我有这个对象:

$scope.items = {
    'abcdhx3': {name:'file1.jpg', type:'.jpg', size:30000},
    'sxcdhb2': {name:'file2.jpg', type:'.png', size:30000},
    'k4cdhx5': {name:'file3.jpg', type:'.jpg', size:30000},
    '23cdhd3': {name:'file4.jpg', type:'.png', size:30000},
    'ascdhx3': {name:'file45.jpg', type:'.png', size:30000}
};

我想根据从输入文本中获得的“名称”和“类型”值过滤此对象。那么如何使用 ng-repeat 中的过滤器来做到这一点,例如:我想显示包含类型为“.png”的“file4”的文件。

<div data-ng-repeat="(key, item) in items">
    <div>{{ item.name }}</div>
</div>

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat angular-filters


    【解决方案1】:

    我已经使用这样的转换过滤器解决了这个问题:

    angular.module('test').filter('itemsFilter', [
        function() {
            return function(items) {
                var list = [];
                for (var i in items) {
                    list.push(items[i]);
                }
                return list;
            };
        }
    ]);
    

    并在应用搜索过滤器之前过滤项目

    Name: <input type="text" ng-model="search.name" />
    Type: <input type="text" ng-model="search.type" />
    <div ng-repeat="item in items | itemsFilter | filter:search">
        <li>{{item.name}}</li>
        <li>{{item.type}}</li>
    </div>
    

    【讨论】:

      【解决方案2】:

      您可以使用简单的Filter

      HTML

      Name: <input type="text" ng-model="search.name" />
      Type: <input type="text" ng-model="search.type" />
      Whatever: <input type="text" ng-model="search.$" />
      <ul ng-repeat="item in items | filter:search">
          <li>{{item.name}}</li>
          <li>{{item.type}}</li>
      </ul>
      

      【讨论】:

      • 它不起作用,我试过这种方法但没有成功,当“items”是一个数组时它可以工作,但“items”是一个对象,所有过滤器属性都在每个 item 值内。
      • @Ragnar 您无法过滤对象。您需要将其转换为数组。对象只是一个kvp。您需要为此实现自己的过滤器
      • 我正在尝试使用过滤功能,但它不起作用 "ng-repeat="item in items | filter:filterFunction" 与 filterFunction(item, index) {..}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2013-07-05
      相关资源
      最近更新 更多