Ответ 1
Вы не можете предотвратить это поведение, но вы можете:
Используйте тему:
class Foo implements OnChanges,OnInit{
onChanges = new Subject<SimpleChanges>();
ngOnInit(){
this.onChanges.subscribe((data:SimpleChanges)=>{
// only when inited
});
}
ngOnChanges(changes:SimpleChanges){
this.onChanges.next(changes);
}
}
Используйте логическое свойство:
class Foo implements OnChanges,OnInit{
initialized=false;
ngOnInit(){
// do stuff
this.initialized = true;
}
ngOnChanges(changes:SimpleChanges){
if(this.initialized){
// do stuff when ngOnInit has been called
}
}
}
Используйте API SimpleChanges
Вы также можете проверить метод SimpleChange.isFirstChange()
:
isFirstChange(): boolean
Проверить, является ли новое значение первым назначенным значением.
class Foo implements OnChanges,OnInit{
@Input()
bar:any;
ngOnInit(){
// do stuff
}
ngOnChanges(changes:SimpleChanges){
if(!changes["bar"].isFirstChange()){
// do stuff if this is not the initialization of "bar"
}
}
}