Arrays 无法读取未定义的Angular/Typescript的属性“push”
我试图将Functionarios对象数组添加到Equipa对象中,但当我尝试推送一个新Functionarios时,它会弹出一个错误TypeError:无法读取undefined的属性“push”,我已经多次检查代码并初始化了所有变量,但它总是给我相同的错误Arrays 无法读取未定义的Angular/Typescript的属性“push”,arrays,angular,typescript,object,Arrays,Angular,Typescript,Object,我试图将Functionarios对象数组添加到Equipa对象中,但当我尝试推送一个新Functionarios时,它会弹出一个错误TypeError:无法读取undefined的属性“push”,我已经多次检查代码并初始化了所有变量,但它总是给我相同的错误 export class Funcionarios { id : Number; codFunc: Number; nomeFunc: string; constructor(codFunc: Numbe
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"));
}
}
好吧,你知道你现在要做什么了 如果要将值推送到null,则null没有推送方法。 如果您将此声明行更改为
equipa: Equipa = new Equipa(null, null, null, []);
如果在stackblitz上进行检查,它将正常工作。Equipa的构造函数使用参数funcs中的任何内容分配ocorFuncs,在您的情况下,该参数为null,因此会覆盖您初始化字段时使用的值。您应该检查参数是否为null,如果参数为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;
}
}
您可以创建一个对象,如下所示:
新设备,空,空,空
初始化ocorFuncs的第四个参数作为null传递,因此:
this.equipa.ocorFuncs.pushnew Functionarios3,zxc
正在对未正确初始化的对象调用push。您正在使用空值初始化equipa。所以打电话之后
新设备,空,空,空
它在构造函数中将它们设置为null
this.ocorFuncs=funcs
尝试使用空数组初始化它
equipa:equipa=新的Equipanull,null,null,[] 尝试按入ngAfterViewInit而不是ngOnInit@Luca,抱歉,这不是答案Equipa:Equipa=新设备,空,空,[]@是的,对!我的误解