Ich verwende Angular 5 und habe einen Dienst mit dem Angular-CLI erstellt
Ich möchte einen Dienst erstellen, der eine lokale JSON-Datei für Angular 5 liest.
Das habe ich ... ich stecke ein bisschen fest ...
import { Injectable } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
@Injectable()
export class AppSettingsService {
constructor(private http: HttpClientModule) {
var obj;
this.getJSON().subscribe(data => obj=data, error => console.log(error));
}
public getJSON(): Observable<any> {
return this.http.get("./assets/mydata.json")
.map((res:any) => res.json())
.catch((error:any) => console.log(error));
}
}
Wie kann ich das fertigstellen?
javascript
json
angular
Dhilt
quelle
quelle
HttpClientModule
nicht in den Konstruktor injiziert werden.Antworten:
Zuerst müssen Sie injizieren
HttpClient
und nichtHttpClientModule
, die zweite Sache , die Sie entfernen müssen ,.map((res:any) => res.json())
werden Sie es nicht mehr brauchen , weil die neueHttpClient
Sie den Körper der Antwort durch Standard geben, stellen schließlich sicher , dass Sie importierenHttpClientModule
in IhrerAppModule
:So fügen Sie dies Ihrer Komponente hinzu:
quelle
Sie haben eine alternative Lösung, bei der Sie Ihren JSON direkt importieren.
Deklarieren Sie dieses Modul zum Kompilieren in Ihrer Datei typings.d.ts
In deinem Code
quelle
import { default as data_json } from '../../path_of_your.json';
Für Angular 7 habe ich die folgenden Schritte ausgeführt, um JSON-Daten direkt zu importieren:
In tsconfig.app.json:
hinzufügen
"resolveJsonModule": true
in"compilerOptions"
In einem Dienst oder einer Komponente:
Und dann
quelle
Ich habe diese Frage gefunden, als ich nach einer Möglichkeit gesucht habe, eine lokale Datei wirklich zu lesen, anstatt eine Datei vom Webserver zu lesen, die ich lieber als "entfernte Datei" bezeichnen würde.
Rufen Sie einfach an
require
:Der Angular-CLI-Quellcode hat mich inspiriert: Ich fand heraus, dass sie Komponentenvorlagen enthalten, indem ich die
templateUrl
Eigenschaft durchtemplate
und den Wert durch einenrequire
Aufruf der tatsächlichen HTML-Ressource ersetzte .Wenn Sie den AOT-Compiler verwenden, müssen Sie die Knotentypdefinitionen hinzufügen, indem Sie Folgendes anpassen
tsconfig.app.json
:quelle
require
ich installieren,@types/node
indem ichnpm install @types/node --save-dev
wie hier beschrieben liefWeitere Informationen finden Sie in diesem Artikel .
quelle
"allowSyntheticDefaultImports": true
meiner tsconfig.json 'compilerOptions' hinzufügen , aber nur, um einen Flusenfehler für TypeScript zu stoppen, NICHT einen tatsächlichen Fehler.Versuche dies
Schreiben Sie Code in Ihren Dienst
JSON-Datei importieren
In Komponente
quelle
Lassen Sie uns eine JSON-Datei erstellen, wir nennen sie navbar.json. Sie können sie beliebig benennen!
navbar.json
Jetzt haben wir eine JSON-Datei mit einigen Menüdaten erstellt. Wir gehen zur App-Komponentendatei und fügen den folgenden Code ein.
app.component.ts
Jetzt ist Ihre Angular 7-App bereit, die Daten aus der lokalen JSON-Datei bereitzustellen.
Gehen Sie zu app.component.html und fügen Sie den folgenden Code ein.
app.component.html
quelle
Mit Typescript 3.6.3 und Angular 6 funktionierte keine dieser Lösungen für mich.
Was tat Arbeit war das Tutorial zu folgen hier die sagen , Sie brauchen eine kleine Datei mit dem Namen hinzufügen
njson-typings.d.ts
zu einem Projekt, mit dieser:Sobald dies erledigt war, konnte ich einfach meine fest codierten JSON-Daten importieren:
und benutze es in meiner Komponente:
quelle