LifecycleHook: изменения — запускаются без @input

#angular #typescript

#angular #машинописный текст

Вопрос:

Я опробовал привязку жизненного цикла к изменениям, см.https://angular.io/guide/lifecycle-hooks#onchanges

Отвечать, когда Angular (повторно) устанавливает входные свойства, привязанные к данным

Теперь мой вопрос: возможно ли запустить его для не-входных свойств, которые меняют свое значение в html? Почему это не работает следующим образом?

У меня есть эти файлы:

HTML

 <html>
  <input ([ngModel])="power"></input>
  <OnChangesTestComponent [power]="power"></OnChangesTestComponent>
</html>
  

HtmlComponent:

 export class HtmlComponent implements {
  power: string;
  @ViewChild(OnChangesComponent) childView: OnChangesComponent;
}
  

OnChangesTestComponent:

 export class OnChangesTestComponent implements OnChanges {
  @Input() power: string;

  ngOnChanges(changes: SimpleChanges) {
    ...
  }
}
  

который я хочу подвести в:

HTML

 <html>
  <input ([ngModel])="power"></input>
</html>
  

HtmlComponent

 export class HtmlComponent implements OnChanges {
  power: string;

  ngOnChanges(changes: SimpleChanges) {
    ...
  }
}
  

Комментарии:

1. вам нужно doCheck для общей грязной проверки, onChanges только для изменений ввода

2.Будьте осторожны, используя doCheck @ABOS. Я бы рекомендовал использовать его в качестве последнего ресурса. While the ngDoCheck() hook can detect when the hero's name has changed, it has a frightful cost angular.io/guide/lifecycle-hooks#docheck

3. @ABOS Хорошо пытался избежать использования doCheck, поскольку он вызывается, даже если изменений не было..

4. @LeandroLima, я не думаю, что производительность является проблемой. обычно вы проверяете изменения простым if (…..) , я не думаю, что вызов этого в целом является дорогостоящим