【问题标题】:Cannot read property 'push' of undefined Angular/Typescript无法读取未定义的 Angular/Typescript 的属性“推送”
【发布时间】:2018-03-19 13:22:01
【问题描述】:

我正在尝试将Funcionarios 对象数组添加到Equipa 对象中,但是当我尝试pushnew Funcionarios 时,它会弹出并且这个错误TypeError: Cannot read property 'push' of undefined,我已经检查了代码几次并初始化了所有变量,但它总是给我同样的错误。

export class Funcionarios {
    id : Number;
    codFunc: Number;
    nomeFunc: string;

    constructor(codFunc: Number, nomeFunc: string) {
        this.codFunc = codFunc;
        this.nomeFunc = nomeFunc;
    }
}

export class Equipa {
    id : Number;
    codEquipa: Number;
    nomeEquipa: string;
    ocorFuncs: Funcionarios[] = [];

    constructor(id : Number, codEquipa: Number, nomeEquipa: string, funcs: Funcionarios[]) {
        this.id = id;
        this.codEquipa = codEquipa;
        this.nomeEquipa = nomeEquipa;
        this.ocorFuncs = funcs;
    }
}

export class TestComponent implements OnInit {

    equipa: Equipa = new Equipa(null, null, null, null);

    ngOnInit() {
        this.equipa.ocorFuncs.push(new Funcionarios(1, "qwe"));
        this.equipa.ocorFuncs.push(new Funcionarios(2, "asd"));
        this.equipa.ocorFuncs.push(new Funcionarios(3, "zxc"));
    }
}

【问题讨论】:

  • 尝试推入ngAfterViewInit而不是ngOnInit
  • @Luca,抱歉,这不是答案
  • equipa: Equipa = new Equipa(null, null, null, []);
  • @Eliseo 是的,对!我的误会

标签: arrays angular typescript object


【解决方案1】:

好的,所以你知道你现在要做什么了。

您想将值推送到nullnull 没有推送方法。 如果您将此声明行更改为

equipa: Equipa = new Equipa(null, null, null, []);

它会正常工作,在 stackblitz 上检查过

【讨论】:

    【解决方案2】:

    Equipa 的构造函数将 ocorFuncs 分配给来自参数 funcs(在您的情况下为 null)的任何值,从而覆盖您初始化字段的值。您应该检查参数是否为空,如果参数为空,则保留默认值:

    export class Equipa {
        id : Number;
        codEquipa: Number;
        nomeEquipa: string;
        ocorFuncs: Funcionarios[] = [];
    
        constructor(id : Number, codEquipa: Number, nomeEquipa: string, funcs: Funcionarios[]) {
            this.id = id;
            this.codEquipa = codEquipa;
            this.nomeEquipa = nomeEquipa;
            this.ocorFuncs = funcs || this.ocorFuncs;
        }
    }
    

    【讨论】:

      【解决方案3】:

      您像这样创建Equipa 对象:

      new Equipa(null, null, null, null);

      第四个参数,初始化ocorFuncs 被传递为null 所以:

      this.equipa.ocorFuncs.push(new Funcionarios(3, "zxc"))

      正在对未正确初始化的对象调用push

      【讨论】:

        【解决方案4】:

        您正在使用 null 值初始化您的 equipa。所以打电话后 new Equipa(null, null, null, null)

        在构造函数中将它们设置为null

        this.ocorFuncs = funcs;

        尝试用空数组初始化它

        equipa: Equipa = new Equipa(null, null, null, []);

        【讨论】:

          猜你喜欢
          • 2019-02-02
          • 2018-01-21
          • 1970-01-01
          • 2020-05-23
          • 2017-03-31
          • 2017-11-23
          • 1970-01-01
          • 2016-06-11
          • 2015-04-06
          相关资源
          最近更新 更多