Фильтр ng-repeat через пары ключ/значение

Я повторяю через модель данных, содержащую пары ключ/значение. Допустим, есть 30 строк, и 5 из них содержат строку «карта» в ключе.

Я хочу отфильтровать отображение, чтобы отображались только те объекты, которые содержат строку «карта». Я знаю, что это фильтр, однако мне не очень повезло с документацией - ни одна из них не касается ng-repeat для ключей/значений.

Любая идея о том, как этого добиться?

<div class="row" 
    data-ng-repeat="(textKey, textValue) in publisher.update.file">
    <div class="small-3 columns">
        <label class="text-right inline" 
            for="file"
            id="textKey">
            {{ textKey }}
        </label>
    </div>
    <div class="text-align-left small-9 columns">
        <input name="textKey"
            ng-model="publisher.update.lang[textKey]">
    </div>
</div>

person lakewood    schedule 22.01.2015    source источник
comment
нельзя ли использовать ng-show? На вашем элементе вы можете ‹span ng-show=textValue=='map'›‹/span›   -  person Caner Akdeniz    schedule 23.01.2015
comment
^ Вот он! Спасибо.   -  person lakewood    schedule 23.01.2015


Ответы (1)


Я сомневаюсь, что вы можете сделать это с помощью по умолчанию фильтр

док говорит:

Выбирает подмножество элементов из массива и возвращает его как новый массив.

Но вы можете создать свой собственный фильтр для достижения этой цели. вот пример

var app = angular.module('app', []);


app.filter('Find', function() {
  return function(input, str) {
    var tmp = {};
    angular.forEach(input, function(val, key) {
      if (val.indexOf(str) !== -1) {
        tmp[key] = val;
      }
    });
    return tmp;
  };
})
app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="MainCtrl">
    <div ng-init="test = {test1:'map',test2:'map2',test3:'test'}"></div>

    Search:
    <input ng-model="search" type="text">
    <br>
    <table id="searchTextResults">
      <tr>
        <th>key</th>
        <th>val</th>
      </tr>
      <tr ng-repeat="(key, val) in test| Find: search||'' ">
        <td>{{key}}</td>
        <td>{{val}}</td>
      </tr>
    </table>
    <hr>
  </div>
</div>

person maxisam    schedule 22.01.2015