簡體   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