typescript - Angular 6 - FEL Typfel: Kan inte läsa egenskapen 'value' av undefined
Jag är ny på Angular och Typescript och kan inte lista ut detta konsolfel: "ERROR TypeError: Cannot read property 'value' of undefined"
Jag ringer en fånig tjänst som returnerar ett Chuck Norris-skämt. Detta fungerar faktiskt okej. Jag får dock Typescript-konsolfel.
Jag har reproducerat här: https://stackblitz.com/edit/angular-chuck
Tack så mycket för att du tittade.
data.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { DataModel } from './data.model';
@Injectable()
export class DataService {
constructor( private http: HttpClient ) { }
chuckUrl = 'https://api.chucknorris.io/jokes/random';
getChuck() {
return this.http.get<DataModel>(this.chuckUrl);
}
}
data.model.ts
export class DataModel {
public category: any;
public icon_url: string;
public id: string;
public url: string;
public value: string;
}
data.komponent
import { Component, OnInit } from '@angular/core';
import { DataService } from './data.service';
import { DataModel } from './data.model';
@Component({
selector: 'app-data',
templateUrl: './data.component.html'
})
export class AppData implements OnInit {
constructor(private dataService: DataService) { }
joke: DataModel;
ngOnInit() {
this.dataService.getChuck()
.subscribe(
(data: DataModel ) => {
if (data.category != 'explicit') {
this.joke = data;
}
}
);
}
}
Svar #1
Bara använd
<div>{{ joke?.value }}</div>
Ditt joke-objekt har inte värdet förrän API-svaret kommer. Använd därför ? för att tillämpa nullkontrollen tills svaret anländer.
Svar #2
Du kan använda *ngIf tills du får svar
nedan är exemplet,
<div *ngIf="joke">{{ joke.value }}</div>
