繁体   English   中英

无法读取未定义的Angular / Typescript的属性“ push”

[英]Cannot read property 'push' of undefined Angular/Typescript

我试图将一个Funcionarios对象数组添加到Equipa对象中,但是当我尝试push一个new FuncionariosEquipa对象时,它弹出并且出现此错误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"));
    }
}

好的,所以您现在就知道要做什么。

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

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

它将工作正常,在stackblitz上检查

对于构造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;
    }
}

您可以这样创建Equipa对象:

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

初始化ocorFuncs的第四个参数作为null传递,因此:

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

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

您正在使用null值初始化equipa 因此,在调用new Equipa(null, null, null, null)

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

this.ocorFuncs = funcs;

尝试用一个空数组初始化它

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM