Winkel-5 - 'json nicht existiert auf dem Typ Object'
Bin ich nach einem einfachen Leitfaden und zur änderung der es leicht für meine Bedürfnisse - Aber ich habe endlich einen Haken über mapping
und subscribing
https://www.sitepoint.com/mean-stack-angular-2-angular-cli/ - Dies ist die Anleitung, und alles funktioniert, bis ich gehen Sie zum erstellen der app nach der Erstellung der List Service
.
Ich habe ein paar änderungen durch Eckige 5 wie der Austausch mit HttpClient, aber nichts außergewöhnliches.
Meinem jetzigen Problem fällt auf, dass diese 2 Funktionen:
public getAllTasks():Observable<Task[]> {
let URI = `${this.serverApi}/tasks/`;
return this.http.get(URI)
.map(res => res.json())
.map(res => <Task[]>res.tasks);
}
public deleteTask(taskId : string){
let URI = `${this.serverApi}/tasks/${taskId}`;
let headers = new HttpHeaders;
headers.append('Content-Type', 'application/json');
return this.http.delete(URI, {headers})
.map(res => res.json());
}
Sogar meine IDE sagt mir, dass
.map(res => res.json())
funktionieren nicht im entweder-Funktion, nämlich: Property 'json' does not exist on type 'Object'.
Ich gesucht habe ein bisschen herum und fand einige ältere post mit Vorschlägen, wie Sie es ändern werden
.map((res: Response) => res.json())
aber ich hatte einen sehr ähnlichen Fehler
A function whose declared type is neither 'void' nor 'any' must return a value.
Mein Modell ist:
export interface Task {
_id?: string;
title: string;
description: string;
category: string;
}
Ursprünglich war dies eine Klasse, aber ich habe es geändert, um eine Schnittstelle, wie empfohlen wurde. Ich bin mir nicht sicher, ob es verwandt ist.
Nicht sicher, ob es ist relativ, aber die Komponente-Seite, es ist:
ngOnInit() {
this.loadTasks();
}
public loadTasks() {
this.taskServ.getAllTasks().subscribe(
response => this.tasks = response,
)
}
Ich nehme an, dies ist einige Verwirrung, die ich mit, wie map
funktioniert oder was es erwartet. Jeder Eingang würde sehr geschätzt.
Update
Winkel - res.json() ist keine Funktion
Wie erwähnt, in diesem post, es scheint, dass HttpClient systemeigen res im JSON-Format, also eigentlich das löschen dieser Zeilen entfernt, die Fehler. Ich werde meine komplette Lösung, wenn ich es bewiesen out.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit HttpClient, brauchen Sie nicht
map(res => res.json())
.map(res => { // login successful if there's a jwt token in the response if (!res.auth_token) return;
Verwenden Sie dieses Codebeispiel
.map((res: Response) => res.json()) as .map(res => res.json())
Meine Antwort gelogen bei der Zuordnung der Antwort ein bisschen anders.
Durch Ihre Zuordnung als standard HTTPClient, ist es mein Problem gelöst, dass er zurückgegeben wird
object Object
auf die Komponente.Meine Komponente blieb unchangeds
Mit HttpClient können Sie es direkt, wie folgt,
und dann in der Komponente,
const tasks
line - 'json nicht existiert auf dem Typ Object'Stellen Sie sicher, dass Sie mit eckigen 4.3 und oberen.
Wenn Sie eckig 4.3 und oberen,die Sie verwenden müssen,
import { HttpClient } from '@angular/common/http';
in diesem Fall müssen Sie nicht haben, um zu verwenden
.map(res => res.json())
weil eckig neue http-automatische Konvertierung von JSON zu einem Objekt.Wenn Sie eckig 4.3 niedriger ,Sie haben zu verwenden
import { Http } from '@angular/http';
in diesen Fall verwenden
.map(res: Response => res.json())