typescript - Httpclient angular handledning
Jag har följt guiden på Angulars webbplats (https://angular.io/guide/http) men jag kan inte uppnå det jag vill eftersom jag får ett fel som jag inte förstår. Jag har lagt min textfil i assets-mappen och skapat en config.json-fil där jag skrev in koden från guiden. Jag får fel i både min service.ts-fil och component.ts-fil. Snälla hjälp mig att förstå mina fel och guiden.
Component.ts
import { Component, OnInit } from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {HttpClient, HttpErrorResponse, HttpResponse} from '@angular/common/http';
import {GeneralService} from '../general.service';
@Component({
selector: 'app-general',
templateUrl: './general.component.html',
styleUrls: ['./general.component.css']
})
export interface General {
generalUrl: string;
textfile: string;
}
export class GeneralComponent implements OnInit {
title = 'Introduction';
generalUrl = 'assets/project_description.txt';
general: General;
generalService: GeneralService;
constructor(private http: HttpClient) { }
ngOnInit() {
}
getGeneral() {
return this.http.get(this.generalUrl);
}
showGeneral() {
this.generalService.getGeneral()
.subscribe(data => this.general = {
generalUrl: data['generalUrl'],
textfile: data['textfile']
});
}
showGeneralResponse() {
this.generalService.getGeneralResponse()
.subscribe(resp => {
const keys = resp.headers.keys();
this.headers = keys.map(key =>
`${key}: ${resp.headers.get(key)}`);
this.config = {
});
}
}
I min showGeneralResponse()-funktion är headers och config odefinierade variabler
Service.ts
import { Injectable } from '@angular/core';
import {General} from './general/general.component';
import {HttpResponse} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class GeneralService {
constructor() { }
getGeneral() {
return this.http.get<General>(this.generalUrl);
}
getGeneralResponse(): Observable<HttpResponse<General>> {
return this.http.get<General>(
this.generalUrl, { observe: 'response'}
);
}
}
I funktionerna getGeneral() och getGeneralresponse() har jag http och generalUrl som är odefinierade variabler
Men i min config.json-fil har jag inget fel
config.json
"generalUrl": "api/general",
"textfile": "assets/project_description.txt"
Jag skulle också vilja veta vilken funktion jag ska lägga i min HTML-fil så att min applikation visar mig min filtext
Svar #1
Lucie, jag har bråttom, (jag antar att problemet är att Angular inte kan hitta filen data.json). Jag satte in det enklaste exemplet jag vet:
//app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {HttpClientModule} from '@angular/common/http';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule
],
providers: [DataService,],
bootstrap: [AppComponent]
})
export class AppModule { }
//DataService.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class DataService {
constructor(private http: HttpClient) { }
getData() {
return this.http.get('../assets/data.json')
}
}
//app.compontent.ts
import { Component, OnInit } from '@angular/core';
import {DataService} from './data.service'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
data:any;
constructor(private dataService:DataService){}
ngOnInit(){
this.dataService.getDataDos(null).subscribe(res=>{
this.data=res;
})
}
}
}
//app.component.html
{{data |json}}
//data.json (in folder assets/)
[
{"key":"uno"},
{"key":"dos"},
{"key":"tres"},
{"key":"cuatro"},
{"key":"cinco"}
]
Svar #2
@Lucie Shaffner 1.- json-filen måste vara en json, se "{" och "
{
generalUrl: "api/general",
textfile: "assets/project_description.txt"
}
2.-Du har definierat variabeln "generalUrl" i din komponent, men inte i tjänsten.
3.-Om du vill använda en tjänst i en komponent måste du injicera den i konstruktorn
//In your component
//remove the line below
//generalService: GeneralService;
//And change the cosntructor
constructor(private http: HttpClient,private generalService:GeneralService) { }
4.-Du måste kalla på funktionen this.showGeneral() i din ngOnInit() annars händer det aldrig
5.- Deklarera exportgränssnittet före komponenten
import { Component, OnInit } from '@angular/core';
...
//Move export inferface here
export interface General {
generalUrl: string;
textfile: string;
}
@Component({
selector: 'app-general',
templateUrl: './general.component.html',
styleUrls: ['./general.component.css']
})
export class GeneralComponent implements OnInit {
...
}
