Enkel AngularJS Front-End for en REST API

1. Oversikt

I denne raske opplæringen lærer vi hvordan du bruker en RESTful API fra en enkel AngularJS front-end.

Vi skal vise data i en tabell, opprette en ressurs, oppdatere den og til slutt slette den.

2. REST API

Først, la oss ta en rask titt på vårt enkle API - å avsløre en Mate ressurs med paginering:

  • bli paginert - / api / myFeeds? page = {page} & size = {size} & sortDir = {dir} & sort = {propertyName}
  • skape - POST / api / myFeeds
  • Oppdater - SETTE / api / myFeeds / {id}
  • slett - SLETT / api / myFeeds / {id}

En rask merknad her er at paginering bruker følgende 4 parametere:

  • side: indeks for ønsket side
  • størrelse: maksimalt antall poster per side
  • sortere: navnet på eiendommen som brukes i sortering
  • sortDir: sorteringsretningen

Og her er et eksempel på hva Mate ressurs ser ut som:

{"id": 1, "name": "baeldung feed", "url": "/ feed"}

3. Feeds-siden

La oss ta en titt på feedsiden vår:

      Legg til ny RSS-feed 
{{row.name}}{{row.url}} Rediger Slett

Merk at vi brukte ng-tabellen til å vise data - mer om det i de følgende avsnittene.

4. En vinkelkontroller

La oss se på AngularJS-kontrolleren vår:

var app = angular.module ('myApp', ["ngTable", "ngResource"]); app.controller ('mainCtrl', funksjon ($ scope, NgTableParams, $ resource) {...});

Noter det:

  • Vi injiserte ngTable modul for å bruke den til å vise dataene våre i en brukervennlig tabell og håndtere paginering / sortering
  • Vi injiserte også ngRessurs modul for å bruke den for å få tilgang til REST API-ressursene

5. En AngularJS-datatabell

La oss nå se raskt på ng-tabell modul - her er konfigurasjonen:

$ scope.feed = $ ressurs ("api / myFeeds /: feedId", {feedId: '@ id'}); $ scope.tableParams = nye NgTableParams ({}, {getData: funksjon (params) {var queryParams = {side: params.page () - 1, størrelse: params.count ()}; var sortingProp = Object.keys (params) .sorting ()); hvis (sortingProp.length == 1) {queryParams ["sort"] = sortingProp [0]; queryParams ["sortDir"] = params.sorting () [sortingProp [0]];} returner $ scope.feed.query (queryParams, function (data, headers) {var totalRecords = headers ("PAGING_INFO"). split (",") [0] .split ("=") [1]; params.total (totalRecords ); returner data;}). $ løfte;}});

API-et forventer en viss paginering, så vi må tilpasse det her i tabellen for å matche det. Vi bruker params ut av ng-modul og lage våre egne queryParams her.

Noen flere merknader om paginering:

  • params.page () starter fra 1, så vi må også sørge for at den blir nullindeksert når vi kommuniserer med API
  • params.sorting () returnerer et objekt - for eksempel {“Name”: “asc”}, så vi må skille nøkkelen og verdien som to forskjellige parametere - sortere, sortDir
  • vi trekker ut det totale elementtallet fra en HTTP-overskrift i Responsen

6. Flere operasjoner

Endelig kan vi utføre mange operasjoner ved hjelp av ngRessurs modul - $ ressurs dekker hele HTTP-semantikken når det gjelder tilgjengelige operasjoner. Vi kan også definere vår tilpassede funksjonalitet.

Vi har brukt spørsmål i forrige avsnitt for å få feeds-listen. Legg merke til at begge og spørsmål gjøre - men spørsmål brukes til å håndtere en matrixrespons.

6.1. Legg til en ny Mate

For å legge til ny feed vil vi bruke $ ressurs metode lagre - som følger:

$ scope.feed = {name: "Ny feed", url: "//www.example.com/feed"}; $ scope.createFeed = funksjon () {$ scope.feeds.save ($ scope.feed, funksjon () {$ scope.tableParams.reload ();}); }

6.2. Oppdater a Mate

Vi kan bruke vår egen tilpassede metode med $ ressurs - som følger:

$ scope.feeds = $ resource ("api / myFeeds /: feedId", {feedId: '@ id'}, {'update': {method: 'PUT'}}); $ scope.updateFeed = funksjon () {$ scope.feeds.update ($ scope.feed, funksjon () {$ scope.tableParams.reload ();}); } 

Legg merke til hvordan vi konfigurerte våre egne Oppdater metode for å sende ut en SETTE be om.

6.3. Slett a Mate

Til slutt kan vi slette en feed ved å bruke slett metode:

$ scope.confirmDelete = funksjon (id) {$ scope.feeds.delete ({feedId: id}, funksjon () {$ scope.tableParams.reload ();}); }

7. AngularJs-dialog

La oss nå se hvordan du bruker ngDialog modul for å vise enkelt skjema for å legge til / oppdatere feeds.

Her er malen vår, vi kan definere den på en egen HTML-side eller på samme side:

{{feed.name}}

Lagre

Og så åpner vi dialogen vår for å legge til / redigere en feed:

$ scope.addNewFeed = funksjon () {$ scope.feed = {navn: "Ny feed", url: ""}; ngDialog.open ({template: 'templateId', scope: $ scope}); } $ scope.editFeed = funksjon (rad) {$ scope.feed.id = row.id; $ scope.feed.name = rad.navn; $ scope.feed.url = row.url; ngDialog.open ({template: 'templateId', scope: $ scope}); } $ scope.save = funksjon () {ngDialog.close ('ngdialog1'); hvis (! $ scope.feed.id) {$ scope.createFeed (); } annet {$ scope.updateFeed (); }}

Noter det:

  • $ scope.save () kalles når brukeren klikker Lagre knappen i vår dialog
  • $ scope.addNewFeed () kalles når brukeren klikker Legg til ny feed på feeds-siden - den initialiseres en ny Mate objekt (uten id)
  • $ scope.editFeed () kalles når brukeren vil redigere en bestemt rad i Feeds-tabellen

8. Feilhåndtering

Til slutt, la oss se hvordan håndtere svarfeilmeldinger ved hjelp av AngularJS.

For å håndtere serverfeilresponser globalt - i stedet for per forespørsel - registrerer vi en avlytter til $ httpTilbyder:

app.config (['$ httpProvider', function ($ httpProvider) {$ httpProvider.interceptors.push (function ($ q, $ rootScope) {return {'responseError': function (responseError) {$ rootScope.message = responseError. data.message; return $ q.reject (responseError);}};});}]);

Og her er vår meldingsrepresentasjon i HTML:

 {{beskjed}} 

9. Konklusjon

Dette var en rask beskrivelse av å konsumere en REST API fra AngularJS.

De full gjennomføring av denne opplæringen finnes i github-prosjektet - dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.


$config[zx-auto] not found$config[zx-overlay] not found