Reputation: 8078
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
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
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
Reputation: 11
Works with
publicDeals: Deal[] = [];
I had the same issue before with the initialization
Upvotes: 1
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
Reputation: 2437
you have to initialize array using below:
publicDeals: Deal[] = [];
or
publicDeals: Deal[] = new Array();
Upvotes: 14