TypeError:无法读取未定义的属性“ insertData”

时间:2018-10-22 18:00:35

标签: javascript json angular search

我遇到了错误:

  

StudentsAttendanceCreateComponent.html:9错误TypeError:无法读取Array.forEach()处students-attendance-create.component.ts:96处未定义的属性“ insertData”

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();
}

谢谢!!!!

3 个答案:

答案 0 :(得分:1)

其参考错误。如果要在回调中使用组件变量或方法,则应使用lambda(箭头)函数,而不要使用文字或匿名函数。

答案 1 :(得分:1)

forEach具有回调函数,除非绑定this,否则内部不可用。一种实现方法是通过arrow function ()=>进行自动绑定。

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

答案 2 :(得分: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();
}

您可以在此处了解不同之处: https://stackoverflow.com/a/34361380/7269215