Атрибут, который я пытаюсь использовать, не определен, когда он определен, когда я консоль регистрирую свой объект - PullRequest
0 голосов
/ 28 апреля 2020

ВОПРОС: Почему он говорит, что мой Grade_ID не определен, когда он действительно определен, когда я его консоль регистрирую? Как я могу решить эту проблему?

ПРОБОВАНО: Я пытался отлаживать эту проблему в течение последних нескольких часов, поэтому я пришел к переполнению стека для решения. -Я гуглил. -Я проверил предыдущие вопросы переполнения стека, и это не поможет мне с этой текущей проблемой.

//my Grade class
 export class Grade{
 public Grade_ID: number;
 public Grade_Mark: number;
 public Subject_Name: string;

constructor(Grade_ID: number, Grade_Mark: number, Subject_Name: string){
Grade_ID = Grade_ID;
Grade_Mark = Grade_Mark;
Subject_Name = Subject_Name;
  }
}

//my .ts file
  grades: Grade[];
  grade: Grade;

 viewSubjectMarks() {
this.studentGrades.forEach((element1) => {
  if (element1.Student_ID === this.Student_ID) {
    console.log(element1)
    this.grade.Grade_ID = element1.Grade_ID;
    this.grade.Grade_Mark = element1.Grade_Mark;
    this.subjects.forEach((element2) => {
      if (element1.Subject_ID === element2.Subject_ID) {
        this.grade.Subject_Name = element2.Subject_Name;
        this.grades.push(this.grade);
      }
    });
  }
});
  }
}

this.grade = {
  Grade_ID: 0,
  Grade_Mark: 0,
  Subject_Name: '',
};

**enter image description here**

Ответы [ 3 ]

3 голосов
/ 28 апреля 2020

Проблема в том, что this.grade равно undefined. Обратите внимание, что ошибка говорит, что он не может установить Grade_ID на undefined. Он не говорит, что Grade_ID - это undefined, и не говорит, что element1 - это undefined.

В показанном вами коде this.grade присваивается значение после l oop. До l oop он имеет значение undefined, отсюда и сообщение об ошибке. Ему нужно присвоить объект, который вы показали до l oop.

1 голос
/ 28 апреля 2020

Хотите отредактировать сообщение , но очередь редактирования заполнена, поэтому необходимо ответить на нее отдельно.

Внутри конструктора значения должны быть назначены с помощью this.

      constructor(Grade_ID:number, Grade_Mark:number, Subject:string){
        this.Grade_ID=Grade_ID;
        this.Grade_Mark=Grade_Mark;
        this.Subject=Subject;
      }
1 голос
/ 28 апреля 2020

оценка не определена в вашем классе до this.garde = {...}. Простой способ решить эту проблему - использовать свойство класса:

  grade: Grade = {
    Grade_ID: 0,
    Grade_Mark: 0,
    Subject_Name: ''
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...