2016-05-24 2 views
4

Я использую Angular 2.Как узнать, какие изменения @Input в ngOnChanges?

Прямо сейчас у меня есть два @input aa и bb. Я хочу делать:

  1. Если aa изменений, сделайте что-нибудь.
  2. Если bb меняется, сделайте другой предмет.

Как узнать, какие изменения @Input в ngOnChanges? Благодаря

@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

Если это слишком многословным, вы можете также попробовать использовать сеттер подход:

_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']) {// здесь все еще выполняется} ' –

+0

Крысы, ок. Я буду редактировать некоторые другие идеи. – awiseman

+0

Привет, @awiseman, я нашел способ, но не тот аккуратный. –

Смежные вопросы