Реальные варианты использования для ngDoCheck (Angular9) - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в Angular и учусь сам, и застрял в методе жизненного цикла ngDoCheck

Согласно документации:
Обнаружение и реагирование на изменения, которые Angular не может или не может обнаружить самостоятельно.

Родительский компонент:

user={
   name:"xxx"
}

update(){
  this.user.name="yyy"
}

Родительский вид:

<button (click)="update">update</button>
<child-comp [inputprop]="user"></child-comp>

Дочерний компонент

ngDoCheck(){
console.log(this.inputprop);
}

Насколько я знаю, используя этот метод жизненного цикла, чтобы получить последние изменения на более глубоком уровне , что ngOnChanges не может обнаружить изменения входного свойства на более глубоком уровне.

Другими словами, ngOnChanges обнаружит изменения свойства, только ссылка на свойство будет изменена.

В вышеприведенном примере метод жизненного цикла ngDocheck ничего не сделал для получения последних изменений свойства. Но вместо этого обнаружение изменений помогает получить последние изменения на более глубоком уровне

Я хочу знать точный вариант использования метода жизненного цикла ngDoCheck.

1 Ответ

0 голосов
/ 02 апреля 2020

Ваш детектор изменений дочерних компонентов может иметь следующие стратегии

  1. по умолчанию
  2. onPu sh

В стратегии по умолчанию CD работает для любое изменение в оформленных свойствах @Input ()

В стратегии onPu sh CD запускается при передаче нового объекта (ссылки) в оформленные свойства @Input.

Независимо от стратегии, CD всегда запускается в следующем сценарии ios,

  1. Событие, такое как щелчок, отправить, запускается
  2. XHR призыв к работе с помощью API
  3. асинхронных JavaScript функций, таких как assetTimeOut () или setInterval () выполняется

Имейте в виду, что Angular CD можно визуализировать как направленное дерево, которое означает, что все компоненты могут рассматриваться как узлы в дереве, и Angular всегда запускает CD с узла root до нижней части дерева.

Anguular Componnet Tree

Даже если в CC -121 сработало событие, Angular запустит CD с компонента root вниз. Однако запуск CD остановится на узле, где для стратегии задано значение onPu sh, и вы не передаете новый объект в одно из оформленных свойств @Input.

Итак, теперь вы немного понимаете, когда и как работает CD, жизненный цикл ngDoCheck () запускается при каждом запуске CD для компонента.

Надеюсь, это поможет.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...