Обнаружение угловых изменений при изменении маршрута

Я прочитал несколько хороших статей о 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 элемент за элементом по мере прохождения через каждый компонент. Для наиболее полного объяснения обнаружения изменений прочитайте все статьи, упомянутые в:

Другие вопросы по тегам