Angular 2 setters vs ngOnChanges

35 javascript angular

如果要在组件/指令输入更改后运行某些代码,可以使用setter或ngOnChangeshook,但在另一个上使用one有什么好处?或者他们完全一样?

  @Input()
  set someInput( val ) {
    this.runSomething();
  }

  ngOnChanges(changes) {
     this.runSomething();
  }
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 37

一个优点ngOnChanges()是,如果您的组件有多个@Input()s ,您可以立即获得所有更改.
如果你的代码只依赖于@Input()一个setter可能是更好的方法.

  • 但是如果组件有很多输入,`ngOnChanges`方法是否就变成了一些可能不相关的东西的地方? (2认同)

Tem*_*dze 8

对于 setter,有一件重要的事情:用 setter 注入的 Pros 应该考虑顺序问题

<child [item1]="item1" [item2]="item2"></child>
<child [item2]="item2" [item1]="item1"></child>
// not same if you use setter
Run Code Online (Sandbox Code Playgroud)

因此,如果 item2 是 setter,item1 一些数据,并且您在 item2 中使用 item1,则它可以正常工作,因为 setter 调用时刻值集,一旦您相反地更改应用程序模板中的输入顺序,应用程序将严重崩溃,因为设置了 item2、item1 的时间是未定义的..