AngularJS-filtrid ja AngularJS-i kohandatud filter koos näitega
⚡ Nutikas kokkuvõte
AngularJS-i filter vormindab avaldise väärtuse kuvamiseks ilma alusandmeid muutmata. Sisseehitatud filtrid hõlmavad suur- ja väiketähti, numbreid, valuutat ja JSON-i, samas kui kohandatud filter käsitleb kõiki vormindusreegleid, mida raamistik veel ei paku.

Mis on AngularJS-i filter?
A Filtreerige AngularJS-is aitab vormindada avaldise väärtust kasutajale kuvamiseks ilma algset väärtust muutmata. Näiteks kui soovite, et string kuvataks kas väike- või suurtähelisena, saate seda teha filtrite abil. Sisseehitatud filtrid, näiteks „väiketähed” ja „suurtähed”, tagastavad stringi soovitud tähesuuruses ning numbrite, valuuta ja JSON-i jaoks on olemas täiendavad filtrid.
⚠️ Versiooni märkus: AngularJS (haru 1.x) jõudis 31. detsembril 2021 oma eluea lõppu ja ei saa enam turvapaiku. Kõik alljärgnev jääb olemasolevate AngularJS-i rakenduste haldamiseks samaks; tänapäevases Angularis täidab sama rolli toru.
Filtreid rakendatakse vaates püstkriipsu abil. Enne igaühe vaatamist on kasulik teada, miks te peaksite oma filtreid kirjutama.
AngularJS-i väiketähtedega filter
See filter võtab stringi ja kuvab kõik selle tähemärgid väiketähtedega.
Allpool saadab kontroller ulatusobjekti kaudu vaatele stringi ja filter teisendab selle väiketähtedeks.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <h1> Guru99 Global Event</h1> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <div ng-app="DemoApp" ng-controller="DemoController"> Tutorial Name : <input type="text" ng-model="tutorialName"><br> This tutorial is {{tutorialName | lowercase}} </div> <script> var app = angular.module('DemoApp', []); app.controller('DemoController', ['$scope', function($scope) { $scope.tutorialName = "Angular JS"; }]); </script> </body> </html>
Code Selgitus
- Suur- ja väiketähtedega string „Angular JS” paigutatakse liikmesmuutujasse nimega
tutorialNameulatusobjektil. - Filtri sümbol (|) tähistab teisenduse väljundit ja
lowercasemärksõna rakendab sisseehitatud filtrit, mis kuvab kogu stringi väiketähtedega.
⚠️ Parandused rakendati igale kuulutusele. Kõigil kuuel algsel näitel oli kolm ühist puudust. chrset="UTF 8" ei ole kehtiv atribuut ega kodeering ja on nüüd charset="UTF-8". angular-route.js koormatud enne angular.min.js, mis tekitab moodulivea ja mida kunagi ei kasutatud – see on eemaldatud, nagu ka kasutamata jQuery viide. Tekstis väideti ka, et väärtus oli „AngularJS“, samas kui kood määras väärtuseks „Angular JS“; tekst vastab nüüd väärtusele.
Väljund:
Suur- ja väiketähtedega string renderdatakse tervikuna väiketähtedega. Vastupidine teisendus toimib samamoodi.
AngularJS-i suurtähtedega filter
See filter on väiketähtede filtri vaste, kuvades kõik tähed suurtähtedega.
Allpool saadab kontroller ulatusobjekti kaudu vaatele stringi ja filter teisendab selle suurtähtedeks.
<!-- The head and library references are unchanged from the previous example --> <div ng-app="DemoApp" ng-controller="DemoController"> Tutorial Name : <input type="text" ng-model="tutorialName"><br> This tutorial is {{tutorialName | uppercase}} </div> <script> app.controller('DemoController', ['$scope', function($scope) { $scope.tutorialName = "Angular JS"; }]); </script>
Code Selgitus
- Suur- ja väiketähtedega string „Angular JS” paigutatakse
tutorialNameja on ulatusobjekti külge kinnitatud. - Filtri sümbolile (|) järgneb
uppercasemärksõna, seega kuvab sisseehitatud filter kogu stringi suurtähtedega.
⚠️ Parandus: Algselt tutvustati seda jaotist kui „näidet AngularJS-i suurtähtede filtrist koos väiketähtede valikuga“, mis on kaks korda vale. See jaotis demonstreerib suurtähtede filtrit ja AngularJS-il pole üldse suurtähtede filtrit – ainult esimese tähe suurtähtedeks kirjutamine nõuab kohandatud filtrit, mille loomist näidatakse hilisemates jaotistes.
Väljund:
Suur- ja väiketähtede filtrid ei aktsepteeri argumente. Järgmine filter näitab, kuidas koolon edastab filtrile parameetri.
Numbrifilter AngularJS-is
See filter vormindab arvu ja saab piirata kuvatavate kümnendkohtade arvu.
Allolev näide kasutab kahe kümnendkoha täpsusega väärtuse kuvamiseks numbrifiltrit. Kontroller saadab arvu vaatele ulatusobjekti kaudu ja filter rakendatakse vaates.
<!-- The head and library references are unchanged --> <div ng-app="DemoApp" ng-controller="DemoController"> This tutorialID is {{tutorialID | number:2}} </div> <script> app.controller('DemoController', ['$scope', function($scope) { $scope.tutorialID = 3.565656; }]); </script>
Code Selgitus
- Paljude kümnendkohtadega arv paigutatakse liikmesmuutujasse nimega
tutorialIDja on ulatusobjekti külge kinnitatud. - Filtri sümbolile (|) järgneb
number:2Koolon edastab argumendi ja arv 2 määrab kaks kümnendkohta. Väärtus ümardatakse kuvamiseks, seega kuvatakse 3.565656 kujul 3.57, samas kui ulatus säilitab täisarvu.
Väljund:
Lihtarvu vormindamisest ei piisa sageli, kui väärtus tähistab raha, millega tegeleb järgmine filter.
AngularJS-i valuutafilter
See filter vormindab arvu valuutaväärtusena, lisades sellele ette valuutasümboli, näiteks $.
Allolevas näites saadab kontroller ulatusobjekti kaudu vaatele numbri ja vaates rakendatakse valuutafiltrit.
<!-- The head and library references are unchanged --> <div ng-app="DemoApp" ng-controller="DemoController"> This tutorial Price is {{tutorialprice | currency}} </div> <script> app.controller('DemoController', ['$scope', function($scope) { $scope.tutorialprice = 20.56; }]); </script>
Code Selgitus
- Arv paigutatakse liikmesmuutujasse nimega
tutorialpriceja on ulatusobjekti külge kinnitatud. - Filtri sümbolile (|) järgneb
currencyfilter.
⚠️ Parandus: Algselt väideti, et valuuta „sõltub masinale rakendatud keelesätetest”. See ei sõltu. AngularJS kasutab vaikimisi teeki kaasasolevat lokaati en-US, seega on sümbol $ olenemata operatsioonisüsteemist. Laadige sobiv angular-locale_*.js faili või edasta sümbol otse: {{tutorialprice | currency:"£"}}.
Väljund:
Stringid ja numbrid on lihtväärtused. Viimane sisseehitatud filter tegeleb tervete objektidega.
JSON-filter AngularJS-is
See filter teisendab objekti vormindatud kujule. JSON string, mis on kasulik ulatusandmete kontrollimiseks arenduse ajal.
Allolevas näites saadab kontroller ulatusobjekti kaudu vaatele objekti ja vaates rakendatakse JSON-filtrit.
<!-- The head and library references are unchanged --> <div ng-app="DemoApp" ng-controller="DemoController"> This tutorial is {{tutorial | json}} </div> <script> app.controller('DemoController', ['$scope', function($scope) { $scope.tutorial = { TutorialID: 12, tutorialName: "Angular" }; }]); </script>
Code Selgitus
- Objekt, mis hoiab
TutorialID: 12jatutorialName: "Angular"paigutatakse liikmesmuutujasse nimegatutorialja on ulatusobjekti külge kinnitatud. - Filtri sümbolile (|) järgneb
jsonfilter, mis serialiseerib objekti taandatud JSON-tekstiks.
⚠️ Parandus: Algselt kirjeldati seda väärtust kui „numbrit“ ja „JSON-tüüpi stringi“. See pole kumbki. See on JavaSkriptiobjekt ja JSON-filter teisendab selle kuvamiseks JSON-stringiks.
Väljund:
Need viis filtrit hõlmavad levinumaid juhtumeid. Kui ükski neist ei anna vajalikku väljundit, kirjutate oma.
AngularJS kohandatud filter
Mõnikord ei pruugi AngularJS-i sisseehitatud filtrid väljundi vormindamise nõuetele vastata. Sellisel juhul saab luua AngularJS-i kohandatud filtri, mis tagastab väljundi nõutaval viisil.
Kohandatud filter registreeritakse moodulisse ja seejärel käitub täpselt nagu sisseehitatud filter. Allolevad jaotised käsitlevad kõigepealt standardfiltreid, kuna kohandatud filter kasutab sama torusüntaksit, ja näitavad seejärel, kuidas seda luua.
Kuidas luua AngularJS-is kohandatud filtrit
Allolevas näites läbib string kontroller vaatele ulatusobjekti kaudu, kuid seda ei tohiks kuvada sellisena, nagu see on. Kohandatud filter AngularJS lisab uue stringi ja kuvab lõpptulemuse.
<!-- The head and library references are unchanged --> <div ng-app="DemoApp" ng-controller="DemoController"> This tutorial is {{tutorial | Demofilter}} </div> <script> var app = angular.module('DemoApp', []); // The factory runs once; the function it returns runs on every value app.filter('Demofilter', function() { return function(input) { return input + " Tutorial"; }; }); app.controller('DemoController', ['$scope', function($scope) { $scope.tutorial = "Angular"; }]); </script>
Code Selgitus
- String „Angular” paigutatakse liikmesmuutujasse nimega
tutorialja on ulatusobjekti külge kinnitatud. - AngularJS pakub
filterKohandatud filtri loomiseks kasutatav registreerimismeetod. Sellele antakse nimi „Demofilter” ja vaade viitab sellele nimele. - See on kohandatud filtri standardkuju: registreeritud funktsioon on tehas tagastades funktsiooni, mis töö teeb. See funktsioon saab filtreeritava väärtuse oma esimese parameetrina ja tagastab tulemuse – antud juhul sisendi, millele on lisatud „Õpetus”.
- Filtrit rakendatakse vaates sama torusüntaksi abil nagu iga sisseehitatud filtrit.
👍 Vihje: Filtrite nimed on tavaliselt väiketähed või camelCase'id. „Demofilter” töötab, aga nimi nagu appendTutorial loeb paremini ja väldib konflikte sisseehitatud nimega.
Väljund:
Sõna „Õpetus” on lisatud edastatud stringile. tutorial muutuja. See filter lisab alati sama teksti, mille järgmises jaotises saab konfigureerida.
Kuidas edastada argumente kohandatud filtrile
Ülaltoodud filter kodeerib lisatava teksti kõvakodeeringu abil, seega saab see teha ainult ühte asja. Sisseehitatud filtrid, näiteks number:2 aktsepteerib argumenti pärast koolonit ja seda saab teha ka kohandatud filter: iga parameeter pärast esimest seostatakse vaates kooloniga eraldatud argumendiga.
See hõlmab kolme sammu: parameetrite lisamine pärast input Tagastatud funktsioonis sisesta vaikeväärtus kõigi valikuliste väärtuste jaoks, et filter töötaks ka argumendi väljajätmisel, seejärel edasta argumendid vaates koolonitega eraldatuna.
app.filter('appendText', function() { return function(input, suffix, separator) { if (!input) { return input; } // guard against undefined separator = typeof separator === 'undefined' ? ' ' : separator; return input + separator + suffix; }; });
Seejärel on vaade järgmine, kus „Õpetus” muutub suffix ja sidekriips muutub separator.
{{tutorial | appendText:"Tutorial"}} // Angular Tutorial
{{tutorial | appendText:"Tutorial":" - "}} // Angular - Tutorial
Kaks detaili on kergesti märkamata. Argumendid on AngularJS-i avaldised, seega tuleb sõnasõnaline string jutumärkidesse panna, samas kui jutumärkideta sõna loetakse ulatuse atribuudina. Filtrid aheldavad ka, igaüks neist saab eelmise väljundi: {{tutorial | appendText:"Tutorial" | uppercase}}.
⚠️ Hoiatus: Hoidke filter puhas – sama väljund sama sisendi jaoks, ilma väliste muudatusteta. AngularJS vahemällu salvestab puhta filtri ja käivitab selle uuesti ainult siis, kui sisend muutub. Filter, mis loeb kellaaega või muudab teenust, tuleb märgistada. $stateful, mis keelab vahemällu salvestamise ja käivitab filtri igal kokkuvõtete tsüklil, mis on lehtede aeglase laadimise sagedane põhjus.
Filtrid ei ole mallidega piiratud. Sama filtrit saab kutsuda ka JavaSkript, nagu järgmisena näidatud.
Kuidas kasutada filtreid kontrolleris $filter teenusega
Filtri rakendamine vaates on tavaline juhtum, kuid teisendatud väärtust on mõnikord vaja kontrolleris sees, näiteks enne andmete serverisse saatmist. AngularJS avaldab kõik registreeritud filtrid, nii sisseehitatud kui ka kohandatud, läbi $filter teenus. Süstige see, kutsuge seda filtri nimega, et saada filtrifunktsioon, seejärel kutsuge see välja väärtuse ja mis tahes argumentidega.
app.controller('DemoController', ['$scope', '$filter', function($scope, $filter) { $scope.tutorial = "Angular"; // Built-in filters, called from JavaScript $scope.shouted = $filter('uppercase')($scope.tutorial); // "ANGULAR" $scope.price = $filter('currency')(20.56); // "$20.56" // A custom filter works exactly the same way $scope.full = $filter('appendText')($scope.tutorial, "Tutorial"); }]);
Samuti on olemas lühem vorm: filtri nime sisestamine, millele järgneb FilterNagu uppercaseFilter, annab filtrifunktsiooni otse ja seda saab kohe kutsuda. Mõlemad vormid annavad sama funktsiooni, seega on valik stiililine.
Kaks kasutusvõimalust kerkivad korduvalt esile. Esimene on kasuliku koormuse ettevalmistamine: kuupäev peab tavaliselt API-ni jõudma kindla mustri järgi ja $filter('date')(value, 'yyyy-MM-dd') loob selle vormiga seotud väärtust puudutamata. Teine on kollektsiooni kitsendamine kontrolleris, selle asemel, et see alles jätta orderBy aastal ng-korda avaldis, kus see kordub igal kokkuvõttel.
Sel viisil süstitud filtrid registreeritakse endiselt moodulis, seega tuleb deklareerida kohandatud filter koos app.filter enne kui ükski kontroller küsib $filter selle jaoks. Vastasel juhul viskab AngularJS tundmatu pakkuja vea.
Filtri kutsumine JavaSkript erineb mallist ühe olulise moel: tulemus arvutatakse üks kord ja salvestatakse ulatusse, mitte ei arvutata seda iga kokkuvõtte puhul uuesti. See teeb sellest kiirema valiku harva muutuva väärtuse puhul ja vale valiku sellise väärtuse puhul, mis peab muutuma. track kasutaja sisend.












