无法在angular2中读取未定义(...)的属性'push'

use*_*624 32 angular

这是在使用下面的代码时"无法读取属性'推送'未定义"的错误

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

整体如下所示

export class Deal { 
  constructor(
    public id: number,
    public name: string,
    public  description: string,
    public originalPrice: number,
    public salePrice: number
      ) { }    
}
Run Code Online (Sandbox Code Playgroud)

在另一个组件中,

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

kit*_*kit 129

publicDeals 没有发起;

publicDeals: Deal[] = [];
Run Code Online (Sandbox Code Playgroud)

  • 为Angular 7工作 (2认同)
  • 它与 Angular 2,3,4....Angular 12 没有任何关系。存在语法错误。它对于 Angular 的每个版本都可以正常工作,除非 Angular 改变了它的 Array 语法。 (2认同)

Raj*_*h.k 11

你必须使用下面的方法初始化数组:

publicDeals: Deal[] = [];
Run Code Online (Sandbox Code Playgroud)

要么

publicDeals: Deal[] = new Array();
Run Code Online (Sandbox Code Playgroud)


Hir*_*age 5

这是数字数组:

items : number[ ] = [ ];
Run Code Online (Sandbox Code Playgroud)