Предпочтительно передавать новый объект при изменении input. Для асинхронного потока можно использовать AsyncPipe; при управляемом внешнем обновлении — корректно вызвать markForCheck.
Как обновить Angular OnPush-компонент без замены на signal?
Предпочтительно передавать новый объект при изменении input. Для асинхронного потока можно использовать AsyncPipe; при управляемом внешнем обновлении — корректно вызвать markForCheck.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
OnPush-компонент получает объект user через input. Родитель меняет user.name на месте, сохраняя ссылку; UI не обновляется в ожидаемый момент. Signals в этой задаче не используются. Какие варианты исправления доступны?
Ответ
Предпочтительно передавать новый объект при изменении input. Для асинхронного потока можно использовать AsyncPipe; при управляемом внешнем обновлении — корректно вызвать markForCheck.
Immutable-обновление делает изменение входа явным и не требует ручного проталкивания UI. MarkForCheck помечает нужную ветку, а detectChanges запускает локальную проверку немедленно и требует большей осторожности. Поведение планирования зависит от конфигурации Angular, включая zoneless; не стоит лечить контракт данных случайным setTimeout. Выбирайте один понятный путь обновления, а не набор обходов change detection.
Источник: angular.dev.