当我的模板在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/

10-12 00:13