Selepas angularjs memperoleh data bahagian belakang dan memberikannya kepada pembolehubah ahli, konsol bahagian hadapan melaporkan ralat bahawa pembolehubah ahli tidak ditentukan Mesej ralat adalah seperti berikut:
PENGECUALIAN: Ralat dalam kelas ./ExerciseDetailComponent ExerciseDetailComponent - templat sebaris:3:12 disebabkan oleh: Tidak dapat membaca 'nama' sifat undefined
Satu lagi mesej ralat
PENGECUALIAN ASAL: Tidak boleh membaca 'nama' sifat undefined
Kod adalah seperti berikut:
import { Component, OnInit } from '@angular/core';
import { Exercise } from './exercise'
import { ExerciseService } from './exercise.service'
@Component({
selector: 'exercise-detail',
templateUrl: './exercise-detail.component.html',
})
export class ExerciseDetailComponent implements OnInit {
exercise: Exercise;
constructor(private exerciseService: ExerciseService) {}
getExercise(): void {
this.exerciseService.getExercise().then(exercise => this.exercise = exercise);
}
ngOnInit(): void {
this.getExercise();
}
}
Oleh kerana kod ralat menunjukkan bahawa sifat dalam latihan saya tidak ditakrifkan, jadi saya menukar kod pengisytiharan latihan di atas kepada kod berikut, dan data yang diperoleh daripada latar belakang boleh diberikan kepada pembolehubah ahli latihan, dan data dipaparkan di meja depan bukan tidak ditentukan , tetapi data yang diperoleh daripada data. Walaupun masalah boleh diselesaikan menggunakan kaedah ini, ia sangat mempengaruhi kebolehbacaan kod.
exercise: Exercise = {
id: undefined,
name: undefined,
timerDuration: undefined
};
Saya nak tahu apa punca ni? Secara teorinya, data yang diperoleh daripada latar belakang telah pun membuka ruang ingatan, dan harus diberikan terus kepada pembolehubah ahli tanpa memulakan pembolehubah ahli.
Dan komponen lain yang saya tulis berdasarkan tutorial angular2 rasmi hanya mengisytiharkan pembolehubah ahli dan tidak memulakannya, supaya data latar belakang boleh diperolehi.
Sila jawab
Ralat ini mungkin berlaku kerana pembolehubah
exercise
就已经是undefined
了吧,所以才没有name
这个属性,才会报错,而不是exercise
tidak diberikan nilai