2016-02-23 2 views
0

Я хочу быть в состоянии вытащить лучшее значение из отфильтрованного списка результатов, это моя тестовая страница:Как я могу вырвать результаты фильтрации?

http://plnkr.co/edit/MCLTKUGpIyuYYjv7DLFM?p=preview

Шаблон

<div ng-controller="repeatController"> 
    <input type="search" ng-model="q" placeholder="filter results..." /> 
    <ul> 
    <li ng-repeat="friend in friends | filter:q as results"> 
     [{{$index + 1}}] {{friend.names[0]}} 
    </li> 
    <li ng-if="results.length == 0"> 
     <strong>No results found...</strong> 
    </li> 
    </ul> 
</div> 

Контроллер

var app = angular.module('app', []); 
app.controller('repeatController', function($scope) { 
    $scope.friends = [ 
    {names:['David King', 'Davey', 'oodavid', 'Queenie']}, 
    {names:['Paul King', 'Pablo', 'The Iron Paul']}, 
    {names:['Michael P O\'Keefe', 'Miguel Vennie']}, 
    {names:['James Griffiths', 'The Kraken', 'Thee Krakken']}, 
    {names:['Queen Elizabeth', 'The Queen']} 
    ]; 
}); 

Когда я печатаю «» В поле поиска, я вижу, что эти люди имеют «» в одном из их имен (что является правильным список) ...

  • Paul King
  • Джеймс Гриффитс
  • Queen Elizabeth

... однако, я хочу, чтобы вырвать лучший матч из массива имен, а не только с помощью первого значения , поэтому он должен оказывать так:

  • Железный Пол
  • Кракен
  • Королева

Любые указатели?

+0

Нужен алгоритм ранжирования. Посмотрите на настраиваемую библиотеку поиска, чтобы сделать это – charlietfl

ответ

1

Из вашего кода я понял, что вы хотите отображать только первое значение во время отображения, но во время поиска вы хотите отображать подмножества вместо первого значения. Это может быть достигнуто за счет следующих изменений: использование

<ul> 
    <!-- Filter the subset containing search text --> 
    <span ng-repeat="friend in friends| filter:q as results"> 
     <!-- Filter again in subset to obtain the actual value --> 
     <li ng-if="(!q && $first) || (q)" ng-repeat="name in friend.names| filter:q as results"> 
     <span>{{name}}</span> 
     </li> 
    </span> 
    <span ng-if="results.length == 0"> 
     <strong>No results found...</strong> 
    </span> 
</ul> 

Make состояния (!q && $first) || (q), чтобы отобразить первое значение, когда нет никакого поиска текста и показать все, когда есть поиск текста.

Updated Plunker

+0

Спасибо Pruthvi-Plunker's down в данный момент, скоро у меня будет скрипка. Выглядит неплохо! – oodavid

+0

Понятно, что есть проблема дублирования, поэтому «the» дает мне: Железный Пол, The Kraken, Thee Krakken, The Queen. Итак, Кракен появляется дважды. Я попробую создать фильтр, чтобы вырвать значения :) – oodavid

Смежные вопросы