Обнаружение угловых изменений при изменении маршрута
Я прочитал несколько хороших статей о Change Detection
В Angular и установлено несколько хорошее понимание того, что это такое и как оно работает. Но каждая статья, которую я читал до сих пор, фокусируется только на Change Detection
когда какое-либо событие происходит на компоненте или когда некоторые input
изменения свойств и т. д. Я еще не нашел ни одной статьи, которая фокусируется на том, что происходит, когда route
изменения? Как Change Detection
работает в этом сценарии? Кроме того, Angular передает все обновления HTML/DOM сразу в браузер или постоянно обновляет браузер, как только находит какое-либо обновление DOM?
1 ответ
Маршрутизация не вызывает обнаружение изменений. Единственное, что он делает конкретно для обнаружения изменений - это маркировка для проверки активируемого компонента розетки маршрутизатора:
@Directive({selector: 'router-outlet', exportAs: 'outlet'})
export class RouterOutlet implements OnDestroy, OnInit {
...
activateWith(activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver|null) {
...
// Calling `markForCheck` to make sure we will run the change detection when the
// `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.
this.changeDetector.markForCheck();
this.activateEvents.emit(this.activated.instance);
}
Маршрутизатор управляется каким-либо пользовательским интерфейсом события или другим (setTimeout, XHR) и т. Д., Который перехватывается NgZone, и как только код завершает выполнение процесса обнаружения изменений, запускается.
Кроме того, Angular передает все обновления HTML/DOM сразу в браузер или постоянно обновляет браузер, как только находит какое-либо обновление DOM?
Он обновляет DOM элемент за элементом по мере прохождения через каждый компонент. Для наиболее полного объяснения обнаружения изменений прочитайте все статьи, упомянутые в: