Номер фильтра в угловом объекте с использованием limitto

Я использую метод фильтра angularjs для повторяющегося массива элементов и пытаюсь отфильтровать числа с помощью фильтра limitTo. Результат не применяется к повтору в DOM.

Вот html

<div ng-controller="demo as d">
      <input type="text" ng-model="d.test" ng-change="d.filterthis(d.test)"><br>
      <div ng-repeat="item in d.items | limitTo:d.limitto  track by $index">
            <span ng-show="!item.show">{{item.myno}}</span> - 
            <span ng-show="!item.show">{{$index}} - {{item.mystr}}</span><br>
      </div>
</div>

Функция фильтра App.js с angularjs

this.filterthis = function(filter){
    that.items.map(function(filter){

            return function(obj){
                obj.show=true;
                if(obj.myno.toString().indexOf(filter) >-1){
                    console.log(obj);
                    obj.show=false;
                }
                return obj;
            }
    }(filter));
};

Items - это такой массив

this.items = [{
        show:false,
        myno:10,
        mystr:"test1"
    }];

http://plnkr.co/edit/bTdlTpSeZuPyGpolXLEG


person Gary    schedule 14.01.2017    source источник
comment
вы пытаетесь не возвращать элементы, к которым применено show:true на основе значений в поле ввода?   -  person haxxxton    schedule 14.01.2017
comment
Это была обратная сторона. Извините за такой способ использования. Вы можете взять show===hide и посмотреть на него. Фильтр - моя проблема. Пожалуйста, проверьте планкр   -  person Gary    schedule 14.01.2017
comment
ng-show=!item.show   -  person Gary    schedule 14.01.2017
comment
правильно, но вы пытаетесь просто показать первые три элемента, которые вы ищете? и не показывать ни одного из тех, которые не соответствуют тексту поиска?   -  person haxxxton    schedule 14.01.2017
comment
да. если я ищу 19, он должен показать 19, а если я ищу 1, он должен показать первые три из всех поисков, начиная с 1, ограничивая до 3 элементов.   -  person Gary    schedule 14.01.2017
comment
и вы просто хотите найти ключ myno, ключ mystr или оба?   -  person haxxxton    schedule 14.01.2017


Ответы (1)


Наличие «show» в качестве ключа для ваших элементов не удаляет его из ng-repeat, поэтому фильтр limitTo по-прежнему будет возвращать элементы. Вместо этого вы должны использовать фильтр filter в повторении следующим образом.

<input type="text" ng-model="d.search"><br>
<div ng-repeat="item in d.items | filter:{myno:d.search} | limitTo:d.limitto track by $index">
    <span>{{item.myno}}</span> - 
    <span>{{$index}} - {{item.mystr}}</span><br>
</div>

Обратите внимание, что порядок здесь важен, если вы limitTo, а затем filter, вы фильтруете только ограниченный результат. Вы можете изменить ключ, по которому вы фильтруете, заменив {myno:d.search} на другой ключ, или, если вы хотите искать весь объект, просто используйте d.search.

Обновлен плункер

person haxxxton    schedule 14.01.2017
comment
Окей круто. У меня была реализация нескольких фильтров, и я не использовал фильтр на основе объекта. Теперь отлично работает. Это было моей действительной потребностью. Огромное спасибо... haxxxton. ;-) plnkr.co/edit/bQh4MoOfTAx7IsMquswZ - person Gary; 14.01.2017