Номер фильтра в угловом объекте с использованием 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));
};

Предметы это массив, как это

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

http://plnkr.co/edit/bTdlTpSeZuPyGpolXLEG

1 ответ

Решение

"Показать" как ключ к вашим предметам, не удаляет его из 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,

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

Другие вопросы по тегам