Spójrz na przykład tutaj: http://docs.angularjs.org/api/ng.filter:filter
Możesz wyszukiwać według dowolnych właściwości telefonu, używając <input ng-model="search">
i możesz wyszukiwać tylko według nazwy, używając <input ng-model="search.name">
, a wyniki są odpowiednio filtrowane według nazwy (wpisanie numeru telefonu nie zwraca żadnych wyników, zgodnie z oczekiwaniami).
Powiedzmy, że mam model z „name” właściwości, „telefon” własności, a „tajnego” własności, jak pójdę o filtrowaniu przez zarówno „Nazwa” i „Telefon” właściwości i nie z „tajne” i usługi ? W skrócie, użytkownik mógłby wpisać nazwę lub numer telefonu i ng-repeat
filtrowałby poprawnie, ale nawet jeśli użytkownik wpisałby wartość stanowiącą część „tajnej” wartości, nic nie zwróci.
Dzięki.
ng-model
(określeniesearch.name
w polu INPUTng-model
) miałoby spowodować, że obiekty, które mają być powtarzane, byłyby filtrowane według ichname
właściwości? To znaczy intuicyjnie dla mnie, powinieneś być w stanie specjalnie filtrować, po prostuname
określając w swoimng-repeat
filtrze:filter: friend.name
zamiast `pisać` <input ng-model = "search.name"> ...Odpowiedzi:
Oto plunker
Nowy plunker z czystszym kodem, w którym zarówno w zapytaniach, jak i elementach listy wyszukiwania nie jest rozróżniana wielkość liter
Główną ideą jest stworzenie funkcji filtrującej, aby osiągnąć ten cel.
Z oficjalnego doc
Aktualizacja
Niektórzy ludzie mogą mieć obawy dotyczące wydajności w świecie rzeczywistym, co jest poprawne.
W prawdziwym świecie prawdopodobnie zrobilibyśmy tego rodzaju filtr ze sterownika.
Oto post szczegółowy pokazujący, jak to zrobić.
w skrócie, dodajemy
ng-change
dane wejściowe do monitorowania nowych zmian wyszukiwaniaa następnie uruchom funkcję filtru.
źródło
item.brand.indexOf($scope.query)!=-1 || item.model.indexOf($scope.query)!=-1)
Obiekt można przekazać jako parametr do wyrażenia filtru, zgodnie z opisem w dokumentacji interfejsu API . Ten obiekt może selektywnie zastosować interesujące Cię właściwości, na przykład:
Oto Plunker
Uwaga ... ten przykład działa świetnie z AngularJS 1.1.5, ale nie zawsze tak dobrze w 1.0.7. W tym przykładzie 1.0.7 zainicjuje się z odfiltrowaniem wszystkiego, a następnie zacznie działać, gdy zaczniesz używać danych wejściowych. Zachowuje się tak, jakby dane wejściowe zawierały niedopasowane wartości, mimo że na początku są puste. Jeśli chcesz pozostać przy stabilnych wydaniach, wypróbuj to w swojej sytuacji, ale niektóre scenariusze mogą chcieć używać rozwiązania @ maxisam do czasu wydania 1.2.0.
źródło
Zainspirowałem się odpowiedzią @ maxisam i stworzyłem własną funkcję sortowania i myślałem, że się nią podzielę (bo się nudzę).
Sytuacja Chcę przefiltrować szereg samochodów. Wybrane właściwości do filtrowania to nazwa, rok, cena i km. Cena nieruchomości i km to liczby (stąd użycie
.toString
). Chcę również kontrolować wielkie litery (stąd.toLowerCase
). Chciałbym również móc podzielić zapytanie filtru na różne słowa (np. Biorąc pod uwagę filtr 2006 Acura, wyszukuje on dopasowania 2006 z rokiem i Acura z nazwą).Funkcja, którą przekazuję do filtra
źródło
Jeśli jesteś otwarty na korzystanie z bibliotek innych firm, przydatne mogą być `` Filtry kątowe '' z ładną kolekcją filtrów:
https://github.com/a8m/angular-filter#filterby
źródło
Mam nadzieję, że ta odpowiedź pomoże, Filtr wielu wartości
I roboczy przykład na tych skrzypcach
źródło
Jest tutaj kilka dobrych rozwiązań, ale proponuję wybrać inną drogę. Jeśli wyszukiwanie jest najważniejsze, a właściwość „sekret” nie jest w ogóle używana w widoku; moim podejściem byłoby użycie wbudowanego filtru kątowego ze wszystkimi jego zaletami i po prostu zmapowanie modelu do nowej tablicy obiektów.
Przykład z pytania:
Teraz w html po prostu użyj zwykłego filtru, aby przeszukać obie te właściwości.
źródło
Całkiem proste podejście z użyciem filterBy w angularJs
Aby pracować plnkr, kliknij ten link
http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview
To specjalnie wykorzystało pojedynczą właściwość do wyszukiwania w wielu kolumnach, ale nie we wszystkich.
kontroler
źródło
Rozwiązałem to po prostu:
źródło
http://plnkr.co/edit/A2IG03FLYnEYMpZ5RxEm?p=preview
Oto wyszukiwanie z rozróżnianiem wielkości liter, które również rozdziela Twoje wyszukiwanie na słowa, które mają być wyszukiwane również w każdym modelu. Dopiero gdy znajdzie spację, spróbuje podzielić zapytanie na tablicę, a następnie przeszukać każde słowo.
Zwraca prawdę, jeśli każde słowo znajduje się przynajmniej w jednym z modeli.
źródło
Filtr może być obiektem JavaScript z polami i możesz mieć wyrażenie:
źródło
Lubię, gdy jest to możliwe, proste. Musiałem pogrupować według Międzynarodowe, przefiltrować wszystkie kolumny, wyświetlić liczbę dla każdej grupy i ukryć grupę, jeśli nie ma żadnych elementów.
Poza tym nie chciałem dodawać niestandardowego filtru tylko dla czegoś tak prostego.
źródło
Mogę się bardzo spóźnić, ale to właśnie zrobiłem. Zrobiłem bardzo ogólny filtr.
Następnie użyj tego w ten sposób
Twoje pole wyszukiwania będzie podobne
gdzie name i device_id to właściwości w dvs
źródło
Oto proste rozwiązanie dla tych, którzy chcą szybkiego filtrowania względem obiektu:
Filtr tablicy pozwala na naśladowanie obiektu, który próbujesz filtrować. W powyższym przypadku następujące klasy działałyby dobrze:
A jak mogłaby wyglądać talia:
A jeśli chcesz filtrować wiele właściwości obiektu, oddziel nazwy pól przecinkami:
EDYCJA: Oto działający plik plnkr, który zawiera przykład filtrów pojedynczych i wielu właściwości:
http://embed.plnkr.co/i0wCx6l1WPYljk57SXzV/
źródło
ng-repeat
. Twój przykład wydaje się jednak nieco skomplikowany: czy można to w jakiś sposób sprowadzić? Wiem, że zasadniczo chodzi o szukanie pojedynczego pola wyszukiwania, które może filtrować tylko dla wybranych właściwości. W Twoim przykładzie wygląda na to, że filtrujemy według nazw wartości nominalnych lub liczb, ale nie obu. Jeśli nie rozumiem Twojego przykładu, daj mi znać!