当我的模板在NGON中渲染函数时,会发生一次,然后只有当@输入改变时。这是预期的行为吗?我该如何预防?
儿童:
export class MobileMenuComponent implements OnInit, OnChanges {
@Input('test') dezeTest: string;
//declare menu
menu;
constructor() {
//define menu
this.menu = {state: 'inactive'};
}
togglemenu() {
var that = this;
if (that.menu.state === 'inactive'){
that.menu.state = 'active';
}
else {
that.menu.state = 'inactive';
}
}
ngOnChanges(changes: SimpleChanges) {
this.togglemenu();
}
}
最佳答案
这是ngonchanges的正常行为。
ngonchanges方法将在第一次启动,因为您的属性已被选中,然后在更新属性时启动。从documentation中,您可以看到
在检查数据绑定属性之后,如果至少有一个属性发生了更改,则在检查视图和内容子项之前,立即调用ngonchanges。
如果你想改变它,你需要考虑如何改变它。你的问题不是很清楚,但是如果你想防止ngonchanges再次触发,当一个属性被更新时(我认为你想要这个是因为你的toggleMenu()
你可以考虑使用ngOnInit()
而不是ngOnChanges()
。或者,您可以在第一次之后阻止togglemenu();操作。
firstrun : boolean = true; // class variable
ngOnChanges(changes : SimpleChanges){
if(firstrun){
this.togglemenu();
firstrun = false;
}
}
或者,如前所述,另一个lifecycle hook可能更适合您的需要。
关于javascript - Angular 2:模板渲染时触发ngOnChanges,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38893207/