Вы можете просмотреть исходный код здесь
https://github.com/angular/angular/blob/master/packages/common/src/pipes/async_pipe.ts
Подписывается на наблюдаемое.
Из комментариев в источнике
- Развертывает значение из асинхронного примитива.*
- Канал
async
подписывается на Observable
или Promise
и возвращает последнее значение, из которого он * - испускается.Когда выдается новое значение, труба
async
отмечает компонент, подлежащий проверке на наличие изменений - .Когда компонент уничтожается, канал
async
автоматически отписывается, чтобы избежать - потенциальных утечек памяти.
Глядя на свой вопрос, вы злоупотребляете точкой наблюдения.Вы не должны вставлять новое значение в массив, вы должны заставить наблюдаемый испускать новый массив.Причина, по которой Angular обновляет страницу, не имеет ничего общего с наблюдаемыми, но тот факт, что вы используете стратегию обнаружения изменений по умолчанию, замечает, что массив изменился.
Если вы используете BehaviorSubject вместо использования, вы можете вызватьдалее
addNewUser() {
const users = this.users$.getValue();
this.users$.next([...users, this.newUser]);
}
Наблюдаемые позволяют вам использовать более эффективную стратегию обнаружения изменений, которая не обновит страницу тем, что вы сделали.Вам необходимо заменить массив новым экземпляром массива, чтобы onPush обнаруживал изменения.