AngularJS-filter & AngularJS-anpassat filter med exempel
โก Smart sammanfattning
Ett filter i AngularJS formaterar vรคrdet av ett uttryck fรถr visning utan att รคndra underliggande data. Inbyggda filter tรคcker skiftlรคge, tal, valuta och JSON, medan ett anpassat filter hanterar alla formateringsregler som ramverket inte redan tillhandahรฅller.

Vad รคr Filter i AngularJS?
A Filtrera i AngularJS hjรคlper till att formatera vรคrdet pรฅ ett uttryck fรถr visning till anvรคndaren utan att รคndra det ursprungliga vรคrdet. Om du till exempel vill att en strรคng ska visas med antingen gemener eller versaler kan du gรถra det med hjรคlp av filter. Inbyggda filter som 'gemener' och 'versaler' returnerar strรคngen med รถnskat gemener eller versaler, och ytterligare filter finns fรถr siffror, valuta och JSON.
โ ๏ธ Versionsnotering: AngularJS (1.x-grenen) nรฅdde slutet av sin livscykel den 31 december 2021 och fรฅr inga ytterligare sรคkerhetsuppdateringar. Allt nedan fรถrblir korrekt fรถr underhรฅll av befintliga AngularJS-applikationer; i moderna Angular fylls samma roll av en pipe.
Filter tillรคmpas i vyn med pipetecknet. Innan du tittar pรฅ vart och ett av dem รคr det bra att veta varfรถr du skulle skriva ditt eget.
Filter med smรฅ bokstรคver i AngularJS
Det hรคr filtret tar en strรคng och visar alla dess tecken med gemener.
Nedan skickar en kontroller en strรคng till vyn via scope-objektet, och ett filter konverterar den till gemener.
<!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 Fรถrklaring
- Strรคngen "Angular JS" med blandade gemener och versaler placeras i en medlemsvariabel som heter
tutorialNamepรฅ omfattningsobjektet. - Filtersymbolen (|) markerar utdata fรถr transformation, och
lowercasenyckelordet tillรคmpar det inbyggda filtret som รฅterger hela strรคngen med gemener.
โ ๏ธ Rรคttelser har tillรคmpats pรฅ varje annons. Alla sex originalexemplar delade tre defekter. chrset="UTF 8" รคr inte ett giltigt attribut eller en kodning, och รคr nu charset="UTF-8". angular-route.js laddad innan angular.min.js, vilket utlรถser ett modulfel, och aldrig anvรคndes โ den har tagits bort, liksom den oanvรคnda jQuery-referensen. Texten pรฅstod ocksรฅ att vรคrdet var "AngularJS" medan koduppsรคttningen var "Angular JS"; texten matchar nu.
Produktion:
Strรคngen med blandade gemener รฅterges helt med gemener. Den motsatta omvandlingen fungerar pรฅ samma sรคtt.
Versalfilter i AngularJS
Det hรคr filtret รคr motsvarigheten till gemenerfiltret och visar alla tecken som versaler.
Nedan skickar en kontroller en strรคng till vyn via scope-objektet, och ett filter konverterar den till versaler.
<!-- 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 Fรถrklaring
- Strรคngen "Angular JS" med blandade gemener och versaler placeras i
tutorialNameoch kopplad till scope-objektet. - Filtersymbolen (|) fรถljs av
uppercasenyckelord, sรฅ det inbyggda filtret รฅterger hela strรคngen med versaler.
โ ๏ธ Rรคttelse: Originalet introducerade detta avsnitt som "ett exempel pรฅ versalfiltret i AngularJS med gemener", vilket รคr fel tvรฅ gรฅnger. Detta avsnitt demonstrerar versalfiltret, och AngularJS har inget versalfilter alls โ att bara anvรคnda den fรถrsta bokstaven krรคver ett anpassat filter, vilket de senare avsnitten visar hur man bygger.
Produktion:
Skiftlรคgesfilter accepterar inga argument. Nรคsta filter visar hur ett kolon skickar en parameter till ett filter.
Nummerfilter i AngularJS
Det hรคr filtret formaterar ett tal och kan begrรคnsa hur mรฅnga decimaler som visas.
Exemplet nedan anvรคnder talfiltret fรถr att visa ett vรคrde begrรคnsat till tvรฅ decimaler. En kontroller skickar talet till vyn via scope-objektet, och filtret tillรคmpas i vyn.
<!-- 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 Fรถrklaring
- Ett tal med mรฅnga decimaler placeras i en medlemsvariabel som heter
tutorialIDoch kopplad till scope-objektet. - Filtersymbolen (|) fรถljs av
number:2Kolonet skickar ett argument, och 2:an anger tvรฅ decimaler. Vรคrdet avrundas fรถr visning, sรฅ 3.565656 visas som 3.57 medan omfรฅnget behรฅller hela talet.
Produktion:
Att formatera ett vanligt tal rรคcker ofta inte nรคr vรคrdet representerar pengar, vilket รคr vad nรคsta filter hanterar.
Valutafilter i AngularJS
Det hรคr filtret formaterar ett tal som ett valutavรคrde och sรคtter en valutasymbol, till exempel $, i prefix.
I exemplet nedan skickar en kontroller ett tal till vyn via scope-objektet, och valutafiltret tillรคmpas i vyn.
<!-- 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 Fรถrklaring
- Ett tal placeras i en medlemsvariabel som heter
tutorialpriceoch kopplad till scope-objektet. - Filtersymbolen (|) fรถljs av
currencyfiltrera.
โ ๏ธ Rรคttelse: Originalet hรคvdade att valutan "beror pรฅ de sprรฅkinstรคllningar som tillรคmpas pรฅ maskinen". Det gรถr den inte. AngularJS anvรคnder den sprรฅkinstรคllning som medfรถljer biblioteket, en-US som standard, sรฅ symbolen รคr $ oavsett operativsystem. Ladda matchande angular-locale_*.js fil, eller skicka symbolen direkt: {{tutorialprice | currency:"ยฃ"}}.
Produktion:
Strรคngar och tal รคr enkla vรคrden. Det sista inbyggda filtret hanterar hela objekt.
JSON-filter i AngularJS
Det hรคr filtret konverterar ett objekt till ett formaterat JSON strรคng, vilket รคr anvรคndbart fรถr att inspektera omfattningsdata under utveckling.
I exemplet nedan skickar en kontroller ett objekt till vyn via scope-objektet, och JSON-filtret tillรคmpas i vyn.
<!-- 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 Fรถrklaring
- Ett fรถremรฅl som hรฅller
TutorialID: 12ochtutorialName: "Angular"placeras i en medlemsvariabel som hetertutorialoch kopplad till scope-objektet. - Filtersymbolen (|) fรถljs av
jsonfilter, som serialiserar objektet till indenterad JSON-text.
โ ๏ธ Rรคttelse: Originalet beskrev detta vรคrde som "ett tal" och som "en strรคng av JSON-typ". Det รคr varken det ena eller det andra. Det รคr en JavaSkriptobjektet, och json-filtret รคr det som konverterar det till en JSON-strรคng fรถr visning.
Produktion:
Dessa fem filter tรคcker de vanligaste fallen. Nรคr inget av dem producerar den utdata du behรถver skriver du ditt eget.
AngularJS anpassat filter
Ibland kan inte de inbyggda filtren i AngularJS uppfylla kraven fรถr formatering av utdata. I sรฅdana fall kan ett anpassat AngularJS-filter skapas, vilket returnerar utdata pรฅ รถnskat sรคtt.
Ett anpassat filter registreras pรฅ en modul och beter sig sedan exakt som ett inbyggt filter. Avsnitten nedan behandlar fรถrst standardfiltren, eftersom ett anpassat filter anvรคnder samma pipe-syntax, och visar sedan hur man bygger ett.
Hur man skapar anpassat filter i AngularJS
I exemplet nedan passerar en strรคng frรฅn styrenhet till vyn via scope-objektet, men ska inte visas som det รคr. Ett anpassat filter i AngularJS lรคgger till en annan strรคng och visar det fรคrdiga resultatet.
<!-- 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 Fรถrklaring
- Strรคngen โAngularโ placeras i en medlemsvariabel som heter
tutorialoch kopplad till scope-objektet. - AngularJS tillhandahรฅller
filterregistreringsmetod som anvรคnds fรถr att skapa ett anpassat filter. 'Demofilter' รคr namnet som ges till det, och det namnet รคr vad vyn refererar till. - Detta รคr standardformen fรถr ett anpassat filter: den registrerade funktionen รคr en fabrik returnerar funktionen som utfรถr arbetet. Den funktionen tar emot vรคrdet som filtreras som sin fรถrsta parameter och returnerar resultatet โ hรคr indata med โHandledningโ tillagd.
- Filtret tillรคmpas i vyn med samma pipe-syntax som alla inbyggda filter.
๐ Dricks: Filternamn รคr konventionellt gemener eller camelCase. 'Demofilter' fungerar, men ett namn som appendTutorial lรคses bรคttre och undviker krockar med ett inbyggt namn.
Produktion:
Ordet 'Handledning' har lagts till i strรคngen som skickats i tutorial variabel. Det hรคr filtret lรคgger alltid till samma text, vilket nรคsta avsnitt gรถr konfigurerbart.
Hur man skickar argument till ett anpassat filter
Filtret ovan hรฅrdkodar texten det lรคgger till, sรฅ det kan bara gรถra en sak. Inbyggda filter som number:2 acceptera ett argument efter ett kolon, och ett anpassat filter kan ocksรฅ: varje parameter efter den fรถrsta mappas till ett kolonseparerat argument i vyn.
Tre steg รคr involverade: lรคgg till parametrar efter input I den returnerade funktionen, ange en standardvรคrde fรถr allt som รคr valfritt sรฅ att filtret fortfarande fungerar nรคr argumentet utelรคmnas, skicka sedan argumenten i vyn separerade med kolon.
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; }; });
Vyn ser dรฅ ut som fรถljer, dรคr โHandledningโ blir suffix och bindestrecket blir separator.
{{tutorial | appendText:"Tutorial"}} // Angular Tutorial
{{tutorial | appendText:"Tutorial":" - "}} // Angular - Tutorial
Tvรฅ detaljer รคr lรคtta att missa. Argument รคr AngularJS-uttryck, sรฅ en bokstavlig strรคng mรฅste citeras, medan ett ord utan citer lรคses som en scope-egenskap. Filter kedjas ocksรฅ, dรคr varje filter tar emot utdata frรฅn det fรถregรฅende: {{tutorial | appendText:"Tutorial" | uppercase}}.
โ ๏ธ Varning: Hรฅll ett filter rent โ samma utdata fรถr samma indata, inga externa รคndringar. AngularJS cachar ett rent filter och kรถr det bara igen nรคr indata รคndras. Ett filter som lรคser klockan eller muterar en tjรคnst mรฅste markeras. $stateful, vilket inaktiverar cachningen och kรถr filtret vid varje sammanfattningscykel, en vanlig orsak till trรถga sidor.
Filter รคr inte begrรคnsade till mallar. Samma filter kan anropas frรฅn JavaManus, som visas hรคrnรคst.
Hur man anvรคnder filter i en kontroller med $filter-tjรคnsten
Att anvรคnda ett filter i vyn รคr vanligt fรถrekommande, men det transformerade vรคrdet behรถvs ibland inuti kontrollenheten, till exempel innan data skickas till en server. AngularJS exponerar alla registrerade filter, bรฅde inbyggda och anpassade, genom $filter service. Injicera den, anropa den med filternamnet fรถr att hรคmta filterfunktionen och anropa sedan den med vรคrdet och eventuella argument.
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"); }]);
En kortare form finns ocksรฅ: injicering av filternamnet fรถljt av Filter, Sรฅsom uppercaseFilter, tillhandahรฅller filterfunktionen direkt och den kan anropas omedelbart. Bรฅda formerna resulterar i samma funktion, sรฅ valet รคr stilistiskt.
Tvรฅ anvรคndningsomrรฅden dyker upp upprepade gรฅnger. Den fรถrsta รคr att fรถrbereda en nyttolast: ett datum mรฅste vanligtvis nรฅ ett API i ett fast mรถnster, och $filter('date')(value, 'yyyy-MM-dd') producerar den utan att vidrรถra vรคrdet som รคr bundet till formen. Det andra รคr att begrรคnsa en samling en gรฅng i kontrollenheten, snarare รคn att lรคmna orderBy i en ng-upprepa uttryck dรคr det kรถrs igen vid varje digest.
Filter som injiceras pรฅ detta sรคtt รคr fortfarande registrerade pรฅ modulen, sรฅ ett anpassat filter mรฅste deklareras med app.filter innan nรฅgon kontrollant frรฅgar $filter fรถr det. Annars ger AngularJS ett okรคnd providerfel.
Anropa ett filter JavaSkript skiljer sig frรฅn en mall pรฅ ett viktigt sรคtt: resultatet berรคknas en gรฅng och lagras i omfรฅnget snarare รคn att berรคknas om vid varje sammanfattning. Det gรถr det till det snabbare alternativet fรถr ett vรคrde som sรคllan รคndras, och fel alternativ fรถr ett som mรฅste รคndras. track anvรคndarinmatning.












