2016-05-24 88 views
4

我正在使用Angular 2.如何知道ngOnChanges中哪些@Input發生了變化?

現在我有兩個@input aabb。我想要做的事:

  1. 如果aa改變了,做點什麼。
  2. 如果bb發生變化,請做其他事情。

如何知道在@ngOnChanges中@Input的變化?由於

@Input() aa; 
    @Input() bb; 

    ngOnChanges(changes: { [propName: string]: SimpleChange }) { 
    // if aa changes, do something 
    // if bb changes, do other thing 
    } 

回答

10

也許能夠做這種方式

ngOnChanges(changes: { [propName: string]: SimpleChange }) { 
    if(changes['aa'] && changes['aa'].previousValue != changes['aa'].currentValue) { 
    // aa prop changed 
    } 
    if(changes['bb'] && changes['bb'].previousValue != changes['bb'].currentValue) { 
    // bb prop changed 
    } 
} 

我很驚訝的是,不變的屬性定義,雖然。從食譜中,我會期望只定義更改的屬性。

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-on-changes

如果是太冗長,你也可以嘗試使用的setter方法:

_aa: string; 
_bb: string; 

@Input() set aa(value: string) { 
    this._aa = value; 
    // do something on 'aa' change 
} 

@Input() set bb(value: string) { 
    this._bb = value; 
    // do something on 'bb' change 
} 

https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-setter

+0

感謝,但我認爲這是錯誤的。因爲我試過了,如果只有'aa'發生變化,'if(changes ['bb']){// here still runs}' –

+0

老鼠,好的。我會編輯一些其他的想法。 – awiseman

+0

嗨,@awiseman,我找到了一種方式,但並不那麼整潔。 –

相關問題