4
votes

Cannot read property 'push' of undefined at SafeSubscriber._next

import { Component, OnInit } from '@angular/core';
import {StudentService} from '../student.service';
import {student} from '../student';


@Component({
  selector: 'app-studentfrm',
  templateUrl: './studentfrm.component.html',
  styleUrls: ['./studentfrm.component.css'],
  providers:[StudentService]
})
export class StudentfrmComponent implements OnInit {


  students: student[];
  student: student;
    name: string;
  birthdate: string;
  gender: string;
  address: string;
  guardianname: string;
  contact: string;
  email: string;
  Areainterested: string;

  constructor(private studentservice: StudentService) { }

  addstudent()
  {
    const newstudent = {
      name: this.name,
      birthdate: this.birthdate,
      gender: this.gender,
      address: this.address,
      guardianname: this.guardianname,
      contact: this.contact,
      email: this.email,
      Areainterested: this. Areainterested
    }
    this.studentservice.addstudent(newstudent)
    .subscribe(student =>{
      this.students.push(student);
      // this.studentservice.getstudents()
      // .subscribe(students =>
      //   this.students = students);

    });
  }

I want to post the data that I enter to my form. When I push that, I got this error:

TypeError: Cannot read property 'push' of undefined at SafeSubscriber._next (studentfrm.component.ts:42) at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub

3
just initialize this students: students[] = []; should worksuper cool

3 Answers

2
votes

Just initialize your variable.

    ngOnInit() {
        this.students = [];
    }
0
votes

define like bellow

<pre>
students = new Array<student>();
</pre>

instead of define like this students: student[];

0
votes

Your student var is not initialized. Replace:

students: student[];

by:

students: students[] = [];