Ответ 1
#
является ссылочной переменной шаблона. Он отбрасывает элемент DOM и не может использоваться таким образом.
Локальные переменные в настоящее время не реализованы в Angular, этот закрытый вопрос можно отслеживать для ссылок на связанные проблемы.
Начиная с Angular 4, синтаксис директив ngIf
и ngFor
был обновлен, чтобы разрешить локальные переменные. Подробнее см. ngIf
. Так что можно сделать
<div *ngIf="user$ | async; let user">
<h3> {{user.name}}
</div>
Это создаст элемент обертки div
и предоставит ему маскирующее поведение, поэтому нет необходимости ?.
Оператор "Элвис".
Если никакой дополнительной разметки не требуется, ее можно изменить на
<ng-container *ngIf="user$ | async; let user">...</ng-container>
Если поведение клоакинга нежелательно, выражение может быть изменено на истинное значение заполнителя.
Заполнитель может быть пустым объектом для значения объекта,
<div *ngIf="(user$ | async) || {}; let user">
<h3> {{user?.name}}
</div>
Или пространство для примитивного значения,
<div *ngIf="(primitive$ | async) || ' '; let primitive">
<h3> {{primitive}}
</div>