Ошибка типа: не удается прочитать свойство 'insertData' из неопределенного

1

Я получаю сообщение об ошибке:

StudentsAttendanceCreateComponent.html: 9 ERROR TypeError: Невозможно прочитать свойство "insertData" неопределенного на students-attendance-create.component.ts: 96 в Array.forEach()

submitForm(form: NgForm) {
let cursoID: number;

Object.keys(form.value).forEach(function (key) {
  if (key === 'cursoId') {
    cursoID = form.value[key];
  }
});

Object.keys(form.value).forEach(function (key) {
  if (key !== 'cursoId') {
    const json = {
      EstudianteId: key,
      asistencia: form.value[key],
      cursoId: cursoID
    };
    this.insertData(json);
  }
});
}



insertData(json: any) {
this.service.studentsAsistencia(json)
  .subscribe(() => {
    this.openSnackBar('Datos insertados correctamente.', 'OK');
  });
// this.clearForm();
}

Спасибо !!!!

Теги:
angular
search

3 ответа

2
Лучший ответ

forEach принимает функцию обратного вызова, this недоступно внутри, если вы не связываете его. Один из способов сделать это через функцию стрелки ()=> автоматически связывает ее.

Object.keys(form.value).forEach((key) => {
  if (key !== 'cursoId') {
    const json = {
      EstudianteId: key,
      asistencia: form.value[key],
      cursoId: cursoID
    };
    this.insertData(json);
  }
});
}
  • 0
    Спасибо !!! это сработало правильно
1

Его опорная ошибка. Если вы хотите использовать переменную компонента или метод внутри обратного вызова, вы должны использовать функцию лямбда (стрелка) вместо использования литеральной или анонимной функции.

1

Чтобы использовать this ключевое слово внутри функции обратного вызова, вы должны использовать функцию стрелки, ваш код должен выглядеть так:

submitForm(form: NgForm) {

let cursoID: number;

Object.keys(form.value).forEach((key) => {
  if (key === 'cursoId') {
    cursoID = form.value[key];
  }
});

Object.keys(form.value).forEach((key) => {
  if (key !== 'cursoId') {
    const json = {
      EstudianteId: key,
      asistencia: form.value[key],
      cursoId: cursoID
    };
    this.insertData(json);
  }
});
}



insertData(json: any) {
this.service.studentsAsistencia(json)
  .subscribe(() => {
    this.openSnackBar('Datos insertados correctamente.', 'OK');
  });
// this.clearForm();
}

вы можете прочитать о различиях здесь: qaru.site/questions/48091/...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню