user824624
user824624

Reputation: 8078

Cannot read property 'push' of undefined(…) in angular2

this is the error saying " cannot read property 'push' of undefined " when using the code below

  let deal = new Deal(  5, 'afaf', 'dafa',5,23 ) 
  this.publicDeals.push( deal )   // gives a error saying Cannot read property 'push' of undefined(…)

The whole is shown below

export class Deal { 
  constructor(
    public id: number,
    public name: string,
    public  description: string,
    public originalPrice: number,
    public salePrice: number
      ) { }    
}

In another component,

import { Component, OnInit } from '@angular/core'; 
import { Deal } from '../deal';
import { DealService } from '../deal.service';

@Component({
  selector: 'public-deals',
  templateUrl: 'public-deals.component.html',
  styleUrls: ['public-deals.component.css']
})

export class PublicDealsComponent implements OnInit {
  publicDeals: Deal[];

  constructor(
    private dealService: DealService) {
  }

  ngOnInit(): void {    
      let deal = new Deal(  5, 'afaf', 'dafa',5,23 ) 
      this.publicDeals.push( deal )   // gives a error saying Cannot read property 'push' of undefined(…)

  }

  purchase(item){
    alert("You bought the: " + item.name);
  }
}

Upvotes: 47

Views: 129482

Answers (7)

Sathiamoorthy
Sathiamoorthy

Reputation: 11580

Use the below approach for when you are adding the element into the array. the below code will work for all angular versions.

const publicDeals: Deal[] = []; //initialize the array
publicDeals.push(deal);

Upvotes: 2

Thomas Raj
Thomas Raj

Reputation: 569

My mistake was I wasn't declaring the array correctly. It was

optionsArray:any[];

It should be

optionsArayy:any=[];//(missing equal to)

Note: This creates an empty Array of type "any"

Upvotes: 1

Kash
Kash

Reputation: 11

Works with

publicDeals: Deal[] = [];

I had the same issue before with the initialization

Upvotes: 1

Hiran Walawage
Hiran Walawage

Reputation: 2185

Here goes the number array:

items : number[ ] = [ ];

Upvotes: 5

kit
kit

Reputation: 4920

publicDeals is not initiated;

publicDeals: Deal[] = [];

Upvotes: 183

thabet
thabet

Reputation: 11

If you use AngularFire5.0 Before pushing you must list your items

const afList = afDb.list('items');
afList.push({ name: 'item' });

you should see the update of Angularfire 5.0 here

Upvotes: 1

Rajesh.k
Rajesh.k

Reputation: 2437

you have to initialize array using below:

publicDeals: Deal[] = [];

or

publicDeals: Deal[] = new Array();

Upvotes: 14

Related Questions