3.3 В чем отличие markForCheck() и detectChanges()?

preview_player
Показать описание
Если вы не выключили модуль NgZone, то он будет с большой частотой вызывать механизм ChangeDetection и установить отличие между markForCheck() и detectChanges() будет довольно сложно. Метод markForCheck() сделан для работы в режиме OnPush, чтобы дать понять детектору, что мы хотим запустить синхронизацию изменений, даже не смотря на то что входные данные не изменились. В свою очередь detectChanges() создан больше чтобы работать в комбинации с методом detach(), когда вы хотите запустить ChangeDetection в локальной ветке.

Официальная документация:

Рекомендации по теме
Комментарии
Автор

Самое четкое объяснение из всех, что видел.

vadimr
Автор

Большое спасибо, простое и наглядное объяснение.

ОльгаЖурова-ий
Автор

Я сделал подобное приложение но только указал компонентам что у них у всех стратегия OnPush. При таком раскладе markForCheck работает не совсем так как вы описали. Да он идет наверх лишь для того чтобы построить путь к помеченному компоненту. При этом он не проверяет изменения на родителях, так как они onPush. Но доходит до помеченного и проверяет только его. И не проверяет его дочерние элементы.

TemRhythm
Автор

Супер, спасибо, но у меня есть такой вопрос где вернее в каких компонентак нужно использывать chengeDetection?, в компанентах где есть инпут оутпут?

SergioUkrAr
Автор

Спасибо большое за наглядный пример! Есть только один вопрос. Разве метод cdCheck() вызывается не при рендере? Как я понимаю, ngDoCheck вызывается когда ангуляр производит change detection у компонента, но не факт, что компонент будет заново отрендерен (если после проверки изменений ничего не найдено, то и ре-рендерить не нужно). Т.е. рендер и проверка изменений это разные вещи

ddobr
Автор

Спасибо за русскую версию. Я английский на слух не воспринимаю

ИванИванов-чэх
Автор

Спасибо, но я чет с первого раза не понял. Запустил английскую версию, там прям понятно объяснено. Спасибо что записал и русскую и английскую версию :)
Это ссылка на английскую версию с этого же канала.

maxsokol