tl; dr Не используйте асинхронный канал с вызовами функций.Это дорого и долго работает и может разрушить пользовательский опыт или в вашем случае привести к сбою вашего браузера: управляйте своими наблюдаемыми объектами самостоятельно, а не с помощью простой в использовании async
pipe.
Есливы все еще хотите использовать async
канал с функцией, вы можете попробовать использовать ChangeDetectionStrategy.OnPush .Это связано с другими недостатками, такими как запуск обнаружения изменений вручную, например, с this.cdr.detectChanges();
и cdr
типа ChangeDetectorRef
.
Пожалуйста, имейте в виду, как работает система Angulars Lifecycle.
Поскольку значения оцененных функций не имеют внутренней ссылки (которую Angular использует для проверки того, изменились ли значения или нужно ли их обновить), они не будут проверяться ловушкой жизненного цикла ngOnChanges
, а скорее с помощью ngDoCheck
, который запускается много раз .
Это особенно плохо с трубами и хуже всего с асинхронной трубой.Если мы назовем ваше использование async
труб дорогостоящим и длительным, Angular заявляет, что:
Дорогой и долговечный трубопровод может разрушить пользовательский опыт
или в вашем случае вылетает браузер.
Пожалуйста, найдите эту запись в блоге для дальнейшего объяснения.