Heim > Web-Frontend > js-Tutorial > Angular und RXJS: Hinzufügen einer REST -API -Back -End

Angular und RXJS: Hinzufügen einer REST -API -Back -End

William Shakespeare
Freigeben: 2025-02-15 13:25:11
Original
918 Leute haben es durchsucht

Angular und RXJS: Hinzufügen einer REST -API -Back -End

Dieser Artikel ist Teil 3 des SitePoint Angular 2 -Tutorials zum Erstellen einer CRUD -App mit der Angular -CLI. In diesem Artikel werden wir unsere Anwendung aktualisieren, um mit einer REST -API -Back -End zu kommunizieren.

lieber mit einem Schritt-für-Schritt-Videokurs Angular zu lernen? Schauen Sie sich an Angular 5 auf SitePoint Premium.

In Teil 1 haben wir gelernt, wie wir unsere Todo -Anwendung zum Ausführen bringen und auf Github -Seiten bereitstellen können. Dies funktionierte gut, aber leider wurde die gesamte App in eine einzige Komponente zusammengefasst.

In Teil zwei untersuchten wir eine modularere Komponentenarchitektur und lernten, wie man diese einzelne Komponente in einen strukturierten Baum kleinerer Komponenten unterteilt, die leichter zu verstehen, wieder zu verwenden und zu warten.

  1. Teil 0 - Die ultimative Angular -CLI -Referenzhandbuch
  2. Teil 1 - Erhalten Sie unsere erste Version der Todo -Anwendung und laufend
  3. Teil 2 - Erstellen Sie separate Komponenten, um eine Liste von Todos und eine einzelne Todo
  4. anzuzeigen
  5. Teil 3 - Aktualisieren Sie den TODO -Dienst, um mit einer REST -API zurück zu kommunizieren.
  6. Teil 4 - Verwenden Sie den Angular -Router, um Daten
  7. aufzulösen
  8. Teil 5 - Authentifizierung hinzufügen, um den privaten Inhalt zu schützen
  9. Teil 6 - So aktualisieren Sie Winkelprojekte auf die neueste Version.

Sie müssen die Teile eins und zwei dieses Tutorials für drei nicht befolgt haben, um Sinn zu machen. Sie können einfach eine Kopie unseres Repo schnappen, den Code von Teil zwei auschecken und diesen als Ausgangspunkt verwenden. Dies wird unten ausführlicher erklärt.

Angular und RXJS: Hinzufügen einer REST -API -Back -End

Key Takeaways

  • Verwenden Sie das HTTPClient von Angular mit RXJs, um asynchrone HTTP -Anforderungen effektiv zu verarbeiten, wenn Sie mit einer REST -API kommunizieren.
  • API -URLs in Umgebungsvariablen speichern, um nahtlos zwischen Entwicklungs- und Produktionsumgebungen zu wechseln, ohne den Code zu ändern.
  • Implementieren Sie Apiservice -Methoden wie getAlltodos, createTodo und deletetodo, um mit der Rest -API mit geeigneten HTTP -Methoden zu interagieren.
  • Übergang TododataService von In-Memory-Speicher zur Nutzung von Apiservice für Datenoperationen und Anpassung an asynchrone Muster mit Observablen.
  • appComponent aktualisieren, um Observable zu verwalten, die von Apiservice zurückgegeben werden, und stellt sicher, dass Komponenten auf Datenänderungen asynchron reagieren.
  • Einführung von ApimockService für Unit -Tests, sodass die Simulation von Apiservice ohne tatsächliche HTTP -Anforderungen ermöglicht wird, um die Zuverlässigkeit und Unabhängigkeit von Tests zu gewährleisten.
  • Konfigurieren Sie die Setups für Anwendungstests, um die erforderlichen Dienste wie Apiservice einzuschließen und asynchrone Testszenarien effektiv zu verarbeiten.

Eine schnelle Zusammenfassung

So sah unsere Anwendungsarchitektur am Ende von Teil 2 aus:

Angular und RXJS: Hinzufügen einer REST -API -Back -End

Derzeit speichert der TododataService alle Daten im Speicher. In diesem dritten Artikel werden wir unsere Anwendung aktualisieren, um stattdessen mit einer REST -API -Back -End zu kommunizieren.

wir werden:

  • Erstellen Sie eine Scheinrest -API zurück
  • Speichern Sie die API -URL als Umgebungsvariable
  • Erstellen Sie einen Apiservice, um mit der Rest -API -Back -End zu kommunizieren
  • Aktualisieren Sie den TododataService, um den neuen Apiservice
  • zu verwenden
  • Aktualisieren Sie die AppComponent, um asynchrone API -Aufrufe
  • zu verarbeiten
  • Erstellen Sie einen ApimockService, um reale HTTP -Aufrufe beim Ausführen von Unit -Tests zu vermeiden.

Angular und RXJS: Hinzufügen einer REST -API -Back -End

Am Ende dieses Artikels werden Sie verstehen:
  • Wie können Sie Umgebungsvariablen verwenden, um Anwendungseinstellungen zu speichern
  • Wie können Sie den Winkel -HTTP -Client verwenden, um HTTP -Anforderungen
  • durchzuführen
  • wie Sie mit Observablen umgehen können, die vom Winkel -HTTP -Client zurückgegeben werden
  • Wie Sie HTTP -Anrufe verspotten können, um eine echte HTTP -Anforderung beim Ausführen von Unit -Tests zu vermeiden.

Also fangen wir an!

up und rennen

Stellen Sie sicher, dass Sie die neueste Version der Angular CLI installiert haben. Wenn Sie dies nicht tun, können Sie dies mit dem folgenden Befehl installieren:
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie eine frühere Version der Winkel -CLI entfernen müssen, können Sie:
npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Danach benötigen Sie eine Kopie des Code aus Teil zwei. Dies ist auf GitHub erhältlich. Jeder Artikel in dieser Serie hat ein entsprechendes Tag im Repository, damit Sie zwischen den verschiedenen Zuständen der Anwendung hin und her wechseln können.

Der Code, mit dem wir in Teil zwei beendet sind und mit dem wir in diesem Artikel beginnen, ist als Teil-2 markiert. Der Code, mit dem wir diesen Artikel beenden, wird als Teil 3 markiert.

Sie können sich Tags wie einen Alias ​​einer bestimmten Commit -ID vorstellen. Sie können mit Git Checkout zwischen ihnen wechseln. Hier können Sie mehr darüber lesen.

Um zum Laufen zu gehen (die neueste Version der angularen CLI installierten) würden wir dies tun:
<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Besuchen Sie dann http: // localhost: 4200/. Wenn alles gut ist, sollten Sie die funktionierende Todo -App sehen.

Einrichten einer REST -API Back End

Verwenden wir JSON-Server, um schnell ein Mock-Back-End einzurichten.

Aus dem Wurzel der Anwendung:
<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen Sie im Root -Verzeichnis unserer Anwendung eine Datei namens DB.json mit folgenden Inhalten:
<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Fügen Sie schließlich ein Skript zu package.json hinzu, um unser Back -End zu starten:
<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir können jetzt unser Rest -API -Ende mit:
<span>npm run json-server
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
starten

Dies sollte Folgendes anzeigen:
  <span>\{^_^}/ hi!
</span>
  Loading db.json
  Done

  Resources
  http://localhost:3000/todos

  Home
  http://localhost:3000
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das ist es! Wir haben jetzt eine REST -API -Back -End auf Port 3000.

Um zu überprüfen

Die folgenden Endpunkte werden unterstützt:

  • get /todos: Holen Sie sich alle vorhandenen Todos
  • get /todos /: id: Holen Sie sich ein vorhandenes Todo
  • Post /Todos: Erstellen Sie ein neues Todo
  • put /todos /: id: Aktualisieren Sie ein vorhandenes Todo
  • löschen /todos /: id: Löschen Sie ein vorhandenes Todo

Wenn Sie also in Ihrem Browser zu http: // localhost: 3000/todos navigieren, sollten Sie eine JSON -Antwort mit allen Todos von db.json sehen.

Um mehr über JSON-Server zu erfahren, schauen Sie sich die Mock Rest-APIs mit JSON-Server an.

Speichern Sie die API -URL

Jetzt, da wir unser Back -End an Ort und Stelle haben, müssen wir ihre URL in unserer Winkelanwendung aufbewahren.

Idealerweise sollten wir dazu in der Lage sein:

  1. Speichern Sie die URL an einem einzelnen Ort, damit wir sie nur einmal ändern müssen, wenn wir ihren Wert ändern müssen
  2. Machen Sie unsere Anwendung während der Entwicklung eine Verbindung zu einer Entwicklungs -API und verbinden Sie sich mit einer Produktions -API in der Produktion.

Zum Glück unterstützt Angular CLI Umgebungen. Standardmäßig gibt es zwei Umgebungen: Entwicklung und Produktion, beide mit einer entsprechenden Umgebungsdatei: SRC/Umgebungen/Umgebungen.

Fügen wir unsere API -URL zu beiden Dateien hinzu:

<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Dies ermöglicht es uns später, die API -URL aus unserer Umgebung in unserer Winkelanwendung zu holen, indem wir:

tun

<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wenn wir ng dienen oder ng bauen, verwendet Angular CLI den in der Entwicklungsumgebung angegebenen Wert (SRC/Umgebungen/Umgebung.TS).

Aber wenn wir ng dienen -Umweltprodukt oder NG -Build -Umweltprodukt verwendet, verwendet Angular CLI den in SRC/Environments/Umgebung angegebenen Wert.Prod.TS.

genau das brauchen wir, um eine andere API -URL für Entwicklung und Produktion zu verwenden, ohne unseren Code ändern zu müssen.

Die Anwendung in dieser Artikelserie wird nicht in der Produktion gehostet. Daher geben wir dieselbe API -URL in unserer Entwicklungs- und Produktionsumgebung an. Dies ermöglicht es uns, NG Serve -Umweltprodukt oder NG -Build -zu vermitteln, um zu sehen, ob alles wie erwartet funktioniert.

Sie können die Zuordnung zwischen Dev und Prod und ihren entsprechenden Umgebungsdateien in .angular-cli.json:

finden

<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Sie können auch zusätzliche Umgebungen erstellen, z. B. das Staging, indem Sie einen Schlüssel hinzufügen:

<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
und Erstellen der entsprechenden Umgebungsdatei.

Um mehr über Winkel -CLI -Umgebungen zu erfahren, überprüfen Sie die ultimative Angular -CLI -Referenzhandbuch.

Jetzt, da wir unsere API -URL in unserer Umgebung gespeichert haben, können wir einen Winkeldienst schaffen, um mit dem Rest -API -Ende zu kommunizieren.

Erstellen Sie den Dienst, um mit der Rest -API zurück zu kommunizieren

Verwenden wir Angular CLI, um einen Apiservice zu erstellen, um mit unserem REST -API zurück zu kommunizieren:

<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies gibt die folgende Ausgabe:

<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Option -Module App.Module.TS fordert Angular CLI an, den Dienst nicht nur zu erstellen, sondern ihn auch als Anbieter im in App.module definierten Winkelmodul zu registrieren.

Öffnen wir src/app/api.service.ts:

npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes injizieren wir unsere Umgebung und den integrierten HTTP-Service von Angular:

<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Bevor wir die von uns benötigten Methoden implementieren, schauen wir uns den HTTP -Service von Angular an.

Wenn Sie mit der Syntax nicht vertraut sind, kaufen Sie unseren Premium -Kurs und stellen Sie Typenkript ein.

Der Winkel -HTTP -Dienst

Der Winkel -HTTP -Dienst ist als injizierbare Klasse von @angular/http erhältlich.

Es ist auf XHR/JSONP basiert und bietet uns einen HTTP -Client, mit dem wir HTTP -Anforderungen in unserer Winkelanwendung stellen können.

Die folgenden Methoden stehen zur Durchführung von HTTP -Anforderungen zur Verfügung:

  • löschen (URL, Optionen): Führen Sie eine Löschenanforderung
  • durch
  • get (URL, Optionen): Führen Sie eine Get -Anforderung
  • durch
  • Kopf (URL, Optionen): Führen Sie eine Kopfanforderung
  • durch
  • Optionen (URL, Optionen): Führen Sie eine Optionsanforderung
  • aus
  • Patch (URL, Körper, Optionen): Führen Sie eine Patch -Anforderung
  • durch
  • Post (URL, Körper, Optionen): Führen Sie eine Postanforderung
  • durch
  • put (URL, Körper, Optionen): Führen Sie eine Put -Anforderung durch.

Jede dieser Methoden gibt ein RXJS beobachtbar zurück.

Im Gegensatz zu den AngularJs 1.x HTTP -Service -Methoden, die Versprechen zurückgegeben haben, geben die Angular HTTP -Dienstmethoden Observable zurück.

Mach dir keine Sorgen, wenn du mit RxJS Observable noch nicht vertraut bist. Wir brauchen nur die Grundlagen, um unsere Bewerbung zum Laufen zu bringen. Sie können nach und nach mehr über die verfügbaren Betreiber erfahren, wenn Ihre Bewerbung sie benötigt, und die Reactivex -Website bietet fantastische Dokumentation.

Wenn Sie mehr über Observablen erfahren möchten, kann es sich auch lohnt, die Einführung von SitePoint in die funktionale reaktive Programmierung mit RXJS zu überprüfen.

Implementierung der Apiservice -Methoden

Wenn wir an die Endpunkte zurückdenken, zeigt unsere REST -API -Back -End:

  • get /todos: Holen Sie sich alle vorhandenen Todos

  • get /todos /: id: Holen Sie sich ein vorhandenes Todo

  • post /todos: Erstellen Sie ein neues Todo

  • put /todos /: id: aktualisiert ein vorhandenes Todo

  • delete /todos /: id: Löschen eines vorhandenen Todo

Wir können bereits eine grobe Übersicht über Methoden erstellen, die wir benötigen, und deren entsprechende Winkel -HTTP -Methoden:

<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schauen wir uns jede der Methoden genauer an.

getAlltodos ()

Die Methode getAlltodos () ermöglicht es uns, alle Todos aus der API zu holen:

<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstens stellen wir eine Anfrage, um alle Todos von unserer API zu holen:

<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies gibt ein beobachtbares.

zurück

wir nennen dann die MAP () -Methode auf der Beobachtbaren, um die Antwort von der API in ein Array von Todo -Objekten umzuwandeln:

<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die eingehende HTTP -Antwort ist eine Zeichenfolge, daher rufen wir zuerst Antwort auf.

wir schauen uns dann über die Todos der API -Antwort und geben ein Array von Todo -Instanzen zurück. Beachten Sie, dass diese zweite Verwendung von map () Array.Prototype.map () verwendet, nicht den RXJS -Operator.

Schließlich fügen wir einen Fehlerhandler an, um potenzielle Fehler an der Konsole zu protokollieren:

npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir definieren den Fehlerhandler in einer separaten Methode, damit wir ihn in anderen Methoden wiederverwenden können:

<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Bevor wir diesen Code ausführen können, müssen wir die erforderlichen Abhängigkeiten aus der RXJS -Bibliothek importieren:

<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, dass die RXJS -Bibliothek riesig ist. Anstatt die gesamte RXJS -Bibliothek mithilfe von Import * als RX aus 'RXJS/RX' zu importieren, wird empfohlen, nur die von Ihnen benötigten Teile zu importieren. Dies wird die Größe Ihres resultierenden Codebündels erheblich auf ein Minimum reduzieren.

In unserer Anwendung importieren wir die beobachtbare Klasse:

<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir importieren die drei Operatoren, die unser Code benötigt:

<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

importierende Operatoren stellt sicher, dass unsere beobachtbaren Instanzen die entsprechenden Methoden mit ihnen angehängt haben.

Wenn wir in unserem Code nicht importieren "rxjs/add/operator/map" haben, würde Folgendes nicht funktionieren:

<span>npm run json-server
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies liegt daran

Wir müssen die Operatoren nur einmal importieren, um die entsprechenden beobachtbaren Methoden in Ihrer Anwendung weltweit zu ermöglichen. Es ist jedoch kein Problem, sie mehr als einmal zu importieren und die resultierende Bündelgröße nicht zu erhöhen.

GetTodobyid ()

Die Methode getTodobyid () ermöglicht es uns, ein einzelnes Todo zu erhalten:

  <span>\{^_^}/ hi!
</span>
  Loading db.json
  Done

  Resources
  http://localhost:3000/todos

  Home
  http://localhost:3000
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wir brauchen diese Methode in unserer Anwendung nicht, aber es ist enthalten, um Ihnen eine Vorstellung davon zu geben, wie sie aussehen würde.

createTodo ()

Die Methode createTodo () ermöglicht es uns, ein neues Todo zu erstellen:

<span>// src/environments/environment.ts
</span><span>// used when we run `ng serve` or `ng build`
</span><span>export const environment = {
</span>  production<span>: false,
</span>
  <span>// URL of development API
</span>  apiUrl<span>: 'http://localhost:3000'
</span><span>};
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wir führen zuerst eine Postanforderung an unsere API aus und geben die Daten als zweites Argument ein:

<span>// src/environments/environment.prod.ts
</span><span>// used when we run `ng serve --environment prod` or `ng build --environment prod`
</span><span>export const environment = {
</span>  production<span>: true,
</span>
  <span>// URL of production API
</span>  apiUrl<span>: 'http://localhost:3000'
</span><span>};
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wir verwandeln dann die Antwort in ein Todo -Objekt:

<span>import { environment } from 'environments/environment';
</span>
<span>// we can now access environment.apiUrl
</span><span>const API_URL = environment.apiUrl;
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
updateTodo ()

Die Methode updateTodo () ermöglicht es uns, ein einzelnes Todo zu aktualisieren:

<span>"environments": {
</span>  <span>"dev": "environments/environment.ts",
</span>  <span>"prod": "environments/environment.prod.ts"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Wir führen zuerst eine Put -Anfrage an unsere API aus und geben die Daten als zweites Argument ein:

<span>"environments": {
</span>  <span>"dev": "environments/environment.ts",
</span>  <span>"staging": "environments/environment.staging.ts",
</span>  <span>"prod": "environments/environment.prod.ts"
</span><span>}
</span>
Nach dem Login kopieren
Wir verwandeln dann die Antwort in ein Todo -Objekt:

ng generate <span>service Api --module app.module.ts
</span>
Nach dem Login kopieren
deletetodobyid ()

Die Methode deletetodobyid () ermöglicht es uns, ein einzelnes Todo zu löschen:

installing <span>service
</span>  create src/app/api.service.spec.ts
  create src/app/api.service.ts
  update src/app/app.module.ts
Nach dem Login kopieren
Wir führen zuerst eine Löschanfrage an unsere API aus:

<span>import { Injectable } from '@angular/core';
</span>
<span><span>@Injectable</span>()
</span><span>export class ApiService {
</span>
  <span>constructor() { }
</span>
<span>}
</span>
Nach dem Login kopieren
Wir verwandeln dann die Antwort in Null:

<span>import { Injectable } from '@angular/core';
</span><span>import { environment } from 'environments/environment';
</span><span>import { Http } from '@angular/http';
</span>
<span>const API_URL = environment.apiUrl;
</span>
<span><span>@Injectable</span>()
</span><span>export class ApiService {
</span>
  <span>constructor(
</span>    <span>private http: Http
</span>  <span>) {
</span>  <span>}
</span>
<span>}
</span>
Nach dem Login kopieren
Wir müssen die Antwort hier nicht wirklich verwandeln und könnten diese Linie weglassen. Es ist nur enthalten, um Ihnen eine Vorstellung davon zu geben, wie Sie die Antwort verarbeiten können, wenn Ihre API Daten zurückgibt, wenn Sie eine Löschanforderung ausführen.

Hier ist der vollständige Code für unseren Apiservice:

<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt, da wir unseren Apiservice haben, können wir ihn verwenden, um unser TododataService mit unserem REST -API -Ende kommunizieren zu lassen.

aktualisiertes tododataService

Derzeit speichert unser TododataService alle Daten in Speicher:

npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um unser TododataService mit unserem REST -API -Ende kommunizieren zu lassen, müssen wir unseren neuen Apiservice injizieren:

<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir aktualisieren auch seine Methoden, um alle Arbeiten an die entsprechenden Methoden im Apiservice zu delegieren:

<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Unsere neuen Methodenimplementierungen sehen viel einfacher aus, da die Datenlogik nun vom Rest -API -Ende bearbeitet wird.

Es gibt jedoch einen wichtigen Unterschied. Die alten Methoden enthielten Synchroncode und kehrten sofort einen Wert zurück. Die aktualisierten Methoden enthalten asynchroner Code und geben ein beobachtbares zurück.

Dies bedeutet auch

appComponent

aktualisieren

Derzeit erwartet der AppComponent, dass der TododataService JavaScript -Objekte und -Arrays direkt zurückgibt:

<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Aber unsere neuen Apiservice -Methoden geben Observables zurück.

Ähnlich wie bei Versprechungen sind Observablen von Natur aus asynchron. Daher müssen wir den Code aktualisieren, um die beobachtbaren Antworten entsprechend zu verarbeiten:

Wenn wir derzeit die Methode toDodataService.getAlltodos () in Get Todos () nennen:

<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Die Methode für toDodataService.getAlltodos () ruft die entsprechende apiservice.getAlltodos () -Methode auf:

<span>npm run json-server
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Dies weist wiederum den Winkel -HTTP -Dienst an, eine HTTP -Anforderung durchzuführen:

  <span>\{^_^}/ hi!
</span>
  Loading db.json
  Done

  Resources
  http://localhost:3000/todos

  Home
  http://localhost:3000
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Es gibt jedoch eine wichtige Sache, an die wir uns erinnern müssen!

solange wir uns nicht an die beobachtbare abonnieren, die von:

zurückgegeben wurde

<span>// src/environments/environment.ts
</span><span>// used when we run `ng serve` or `ng build`
</span><span>export const environment = {
</span>  production<span>: false,
</span>
  <span>// URL of development API
</span>  apiUrl<span>: 'http://localhost:3000'
</span><span>};
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Es wird keine tatsächliche HTTP -Anforderung gestellt.

Um ein beobachtbares Abonnement zu abonnieren, können wir die Methode subscribe () verwenden, die drei Argumente annimmt:

    Onnext: Eine Funktion, die aufgerufen wird, wenn der Beobachtbare einen neuen Wert
  • emittiert
  • onError: Eine Funktion, die aufgerufen wird, wenn der beobachtbare Fehler
  • auswirkt
  • eingeführt: Eine Funktion, die aufgerufen wird, wenn das Beobachtbare anmutig gekündigt hat.

Schreiben wir unseren aktuellen Code um:

<span>// src/environments/environment.prod.ts
</span><span>// used when we run `ng serve --environment prod` or `ng build --environment prod`
</span><span>export const environment = {
</span>  production<span>: true,
</span>
  <span>// URL of production API
</span>  apiUrl<span>: 'http://localhost:3000'
</span><span>};
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

lädt das Todos asynchron, wenn die AppComponent initialisiert wird:

<span>import { environment } from 'environments/environment';
</span>
<span>// we can now access environment.apiUrl
</span><span>const API_URL = environment.apiUrl;
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstens definieren wir ein öffentliches Eigentum, Todos und setzen ihren Anfangswert auf ein leeres Array.

Wir verwenden dann die ngoninit () -Methode, um dies zu abonnieren.

Lassen Sie uns nun die Methode Onaddtodo (TODO) aktualisieren, um auch eine beobachtbare Antwort zu verarbeiten:

<span>"environments": {
</span>  <span>"dev": "environments/environment.ts",
</span>  <span>"prod": "environments/environment.prod.ts"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Auch hier verwenden wir die von this.tododataService.Addtodo (toDo) zurückgegebene Abrufen () -Methode, um die von dieser Reaktion einsetzt zu beobachten. >

Wir wiederholen die gleiche Übung für die anderen Methoden, bis unsere AppComponent so aussieht:

<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das ist es; Alle Methoden können nun von den TododataService -Methoden zurückgegeben werden.

Beachten Sie, dass sich nicht manuell abmelden muss, wenn Sie ein Beobachtbar abonnieren, das durch den angularen HTTP -Service zurückgegeben wird. Angular wird alles für Sie aufräumen, um Speicherlecks zu verhindern.

Mal sehen, ob alles wie erwartet funktioniert.

ausprobieren

Öffnen Sie ein Terminalfenster.

Starten Sie aus der Stammin unseres Anwendungsverzeichnisses das REST -API zurück:

npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Öffnen Sie ein zweites Terminalfenster.

Diene erneut aus der Wurzel unseres Anwendungsverzeichnisses der Winkelanwendung:

<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Navigieren Sie jetzt in Ihrem Browser zu http: // localhost: 4200.

Wenn alles gut geht, sollten Sie Folgendes sehen:

Angular und RXJS: Hinzufügen einer REST -API -Back -End

Wenn Sie einen Fehler sehen, können Sie Ihren Code mit der Arbeitsversion auf GitHub vergleichen.

Super! Unsere Bewerbung kommuniziert jetzt mit dem Rest -API -Ende!

Seitenspitze: Wenn Sie NPM ausführen möchten, können Sie JSON-Server und NG im selben Terminal ausführen, können Sie gleichzeitig verwenden, um beide Befehle gleichzeitig auszuführen, ohne mehrere Terminalfenster oder Registerkarten zu öffnen.

Führen Sie unsere Unit -Tests durch, um zu überprüfen, ob alles wie erwartet funktioniert.

Ausführen unserer Tests

Öffnen Sie ein drittes Terminalfenster.

Führen Sie erneut aus der Stammin Ihres Anwendungsverzeichnisses die Unit -Tests aus:

<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es scheint, dass 11 Unit -Tests ausfallen:

Lassen Sie uns sehen, warum unsere Tests fehlschlagen und wie wir sie beheben können.

Fixieren unserer Unit -Tests

Erstens öffnen wir src/todo-data.service.spec.ts:

<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die meisten fehlenden Unit -Tests befassen sich mit der Überprüfung der Datenbehandlung. Diese Tests sind nicht mehr erforderlich, da die Datenbehandlung jetzt von unserem REST -API -Back -End anstelle des TododataService durchgeführt wird. Entfernen wir also die veralteten Tests:

<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir jetzt die Unit -Tests ausführen, erhalten wir einen Fehler:

<span>npm run json-server
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der Fehler wird geworfen

Um den Injektor auf den Apiservice aufmerksam zu machen, müssen wir ihn mit dem temporären Modul registrieren, indem wir den Apiservice als Anbieter im Konfigurationsobjekt auflisten, das an testbed.configurEtestingModule () übergeben wird:

  <span>\{^_^}/ hi!
</span>
  Loading db.json
  Done

  Resources
  http://localhost:3000/todos

  Home
  http://localhost:3000
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wenn wir dies tun, wird unser Unit -Test unseren echten Apiservice verwenden, der mit unserem REST -API -Back -End verbunden ist.

Wir möchten nicht, dass unser Testläufer beim Ausführen unserer Unit -Tests eine Verbindung zu einer echten API herstellt. Erstellen Sie also einen Apimock -Service, um den wirklichen Apiservice in Unit -Tests zu verspotten.

Erstellen eines ApimockService

Verwenden wir Angular CLI, um einen neuen ApimockService zu erzeugen:

<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies zeigt Folgendes:

npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes implementieren wir dieselben Methoden wie Apiservice, aber wir lassen die Methoden Scheindaten zurückgeben, anstatt HTTP -Anforderungen zu erstellen:

<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-2
</span><span>npm install
</span>ng serve
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, wie jede Methode neue neue Scheindaten zurückgibt. Dies mag sich ein bisschen wiederholt, aber es ist eine gute Praxis. Wenn ein Unit -Test die Scheindaten ändern würde, kann die Änderung die Daten in einem anderen Unit -Test niemals beeinflussen.

Jetzt, da wir einen ApimockService -Service haben, können wir in unseren Unit -Tests mit ApimockService Apiservice ersetzen.

Lassen Sie uns Src/Todo-Data.Service.spec.ts erneut öffnen.

Im Anbieter -Array sagen wir dem Injektor, er solle den ApimockService anbieten, wenn der Apiservice angefordert wird:

<span>npm install json-server --save
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir jetzt die Unit-Tests erneut durchführen, ist der Fehler verschwunden. Toll!

Wir haben jedoch noch zwei fehlgeschlagene Tests:

<span>{
</span>  <span>"todos": [
</span>    <span>{
</span>      <span>"id": 1,
</span>      <span>"title": "Read SitePoint article",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 2,
</span>      <span>"title": "Clean inbox",
</span>      <span>"complete": false
</span>    <span>},
</span>    <span>{
</span>      <span>"id": 3,
</span>      <span>"title": "Make restaurant reservation",
</span>      <span>"complete": false
</span>    <span>}
</span>  <span>]
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Fehler sind ähnlich wie die, die wir gerade behoben haben.

Öffnen wir src/api.service.spec.ts:

, um den ersten Fehler zu beheben:
<span>"scripts": {
</span>  <span>...
</span>  <span>"json-server": "json-server --watch db.json"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der Test schlägt mit einer Nachricht versagt, kein Anbieter für HTTP!

Auch hier möchten wir nicht, dass der HTTP -Dienst echte HTTP -Anfragen sendet. Daher instanziieren wir einen Mock HTTP -Dienst, der Angulars Mockbackend verwendet:

<span>npm run json-server
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Machen Sie sich keine Sorgen, wenn das Konfigurieren des Testmoduls etwas überwältigend aussieht.

Sie können mehr über das Einrichten von Unit -Tests in der offiziellen Dokumentation zum Testen von Winkelanwendungen erfahren.

um den endgültigen Fehler zu beheben:

  <span>\{^_^}/ hi!
</span>
  Loading db.json
  Done

  Resources
  http://localhost:3000/todos

  Home
  http://localhost:3000
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Öffnen wir src/app.component.spec.ts:

<span>// src/environments/environment.ts
</span><span>// used when we run `ng serve` or `ng build`
</span><span>export const environment = {
</span>  production<span>: false,
</span>
  <span>// URL of development API
</span>  apiUrl<span>: 'http://localhost:3000'
</span><span>};
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Stellen Sie den Injektor dann unseren Schein -Apiservice an:

<span>// src/environments/environment.prod.ts
</span><span>// used when we run `ng serve --environment prod` or `ng build --environment prod`
</span><span>export const environment = {
</span>  production<span>: true,
</span>
  <span>// URL of production API
</span>  apiUrl<span>: 'http://localhost:3000'
</span><span>};
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hurra! Alle unsere Tests bestehen:

Angular und RXJS: Hinzufügen einer REST -API -Back -End

Wir haben unsere Winkelanwendung erfolgreich mit unserem REST -API -Back -End verbunden.

Um unsere Anwendung in einer Produktionsumgebung bereitzustellen, können wir jetzt ausführen:

<span>import { environment } from 'environments/environment';
</span>
<span>// we can now access environment.apiUrl
</span><span>const API_URL = environment.apiUrl;
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir laden das generierte DIST -Verzeichnis auch auf unseren Hosting -Server hoch. Wie süß ist das?

Lassen Sie uns das zusammenschließen, was wir gelernt haben.

Zusammenfassung

Im ersten Artikel haben wir gelernt, wie man:

  • Initialisieren Sie unsere Todo -Anwendung mit Angular CLI
  • Erstellen Sie eine Todo -Klasse, um einzelne Todos
  • darzustellen
  • Erstellen Sie einen TododataService -Dienst, um Todos
  • zu erstellen, zu aktualisieren und zu entfernen
  • Verwenden Sie die AppComponent -Komponente, um die Benutzeroberfläche
  • anzuzeigen
  • Stellen Sie unsere Anwendung auf Github -Seiten ein.

Im zweiten Artikel haben wir AppComponent überarbeitet, um den größten Teil seiner Arbeit zu delegieren, um:

zu delegieren:
  • a todolistComponent, um eine Liste von Todos
  • anzuzeigen
  • a todolistItemComponent, um ein einzelnes Todo
  • anzuzeigen
  • a todolistheaderComponent, um ein neues Todo zu erstellen
  • a todolistfotercomponent, um zu zeigen, wie viele Todos übrig sind.

In diesem dritten Artikel:
  • Erstellte eine Scheinrest -API zurück
  • speichert die API -URL als Umgebungsvariable
  • erstellte einen Apiservice, um mit der Rest -API -Back -End zu kommunizieren
  • aktualisiert den TododataService, um den neuen Apiservice
  • zu verwenden
  • aktualisiert die AppComponent, um asynchrone API -Aufrufe
  • zu behandeln
  • Erstellte einen ApimockService, um reale HTTP -Aufrufe beim Ausführen von Unit -Tests zu vermeiden.

dabei haben wir gelernt:

  • So verwenden Sie Umgebungsvariablen zum Speichern von Anwendungseinstellungen
  • So verwenden Sie den Winkel -HTTP -Client, um HTTP -Anforderungen
  • durchzuführen
  • wie man mit Observablen umgeht, die vom Winkel -HTTP -Client zurückgegeben werden
  • wie man HTTP -Anrufe verspottet, um reale HTTP -Anforderungen beim Ausführen von Unit -Tests zu vermeiden.

Alle Code aus diesem Artikel finden Sie in GitHub.

In Teil vier stellen wir den Router und Refactor AppComponent vor, um den Router zu verwenden, um die Todos vom hinteren Ende abzurufen.

In Teil 5 werden wir die Authentifizierung implementieren, um den unbefugten Zugriff auf unsere Anwendung zu verhindern.

Dieser Artikel wurde von Vildan Softic geprüft. Vielen Dank an alle Peer -Rezensenten von SitePoint, die SitePoint -Inhalte so gut wie möglich gemacht haben!

häufig gestellte Fragen (FAQs) zu Angular- und RXJS -API -Dienst mit REST -Backend

Welche Rolle spielt RXJs im Winkel-API-Dienst? Code. Im Kontext des Winkel -API -Dienstes spielt RXJS eine entscheidende Rolle beim Umgang mit asynchronen Operationen. Es bietet eine Möglichkeit, Observablen zu erstellen und zu arbeiten, mit denen mehrere asynchrone Vorgänge verwaltet, Fehler behandelt und sogar Vorgänge abgesagt werden können. Dies macht es zu einem leistungsstarken Werkzeug für die Arbeit mit HTTP -Anforderungen, die von Natur aus asynchron sind. Dieses Modul bietet eine vereinfachte API für die HTTP -Funktionalität. Es ermöglicht Angular, HTTP -Anforderungen an den Server zu stellen, Benutzerdaten zu senden oder Daten vom Server abzurufen. Das HTTPClient -Modul enthält auch Methoden für Anforderungen wie Get, Post, Put, Löschen, die den in erholsamen APIs verwendeten HTTP -Methoden entsprechen. > Fehlerbehandlung ist ein wesentlicher Bestandteil jeder Anwendung. Im Winkel -API -Service können Sie Fehler mit dem CatchError -Operator von RXJs behandeln. Dieser Bediener fängt den Fehler auf dem Beobachtbaren auf und ermöglicht es Ihnen, ihn zu handhaben oder ein neues Observable zurückzugeben. Sie können es in der Rohrmethode des Beobachtbaren nach der Methode verwenden, die möglicherweise einen Fehler aufwirft.

Wie kann ich eine Anforderung im Winkel -API -Dienst stornieren? Wenn Sie ein beobachtbares Abonnement abonnieren, gibt es ein Abonnementobjekt zurück. Dieses Objekt verfügt Sie können eine fehlgeschlagene Anforderung mit dem Wiederholung oder Wiederholung von RXJS erneut der Betreiber von RXJs wiederholen. Der Wiederholungsbetreiber wird erneut an die beobachtbare Anforderung wiederholt und die HTTP -Anforderung effektiv wiederholt. Mit dem Wiederholungspreis können Sie eine Bedingung für die Wiederholung der Anforderung definieren. Funktion von rxjs. Diese Funktion nimmt ein Array von Observablen an und gibt ein neues Beobachtbar zurück, das ein Array der Ergebnisse der Eingabe -Observablen ausgibt, sobald sie alle abgeschlossen sind.

Im Angular API -Dienst können Sie die Antwortdaten mit dem Kartenoperator von RXJS transformieren. Dieser Bediener wendet eine bestimmte Funktion auf jedes von der Beobachtbare emittierte Element an und gibt ein neues Observable zurück, das die Ergebnisse emittiert. Angular API -Dienst, Sie können Daten mit der Post -Methode des HTTPClient -Moduls an den Server senden. Diese Methode nimmt die URL des Servers und die Daten als Parameter an und gibt ein beobachtbares zurück, das Sie abonnieren können. > Im Angular API -Dienst können Sie Daten auf dem Server mithilfe der Put -Methode des HTTPCLIENT -Moduls aktualisieren. Diese Methode übernimmt die URL des Servers, die Daten zum Aktualisieren und optional die Optionen für die Anforderung als Parameter und gibt ein beobachtbares zurück, das Sie abonnieren können. Angular API -Dienst? Diese Methode übernimmt die URL des Servers und optional die Optionen für die Anforderung als Parameter, und gibt ein Beobachtbar zurück, das Sie abonnieren können.

Das obige ist der detaillierte Inhalt vonAngular und RXJS: Hinzufügen einer REST -API -Back -End. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage