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>

Relaterade artiklar