Кажется немного избыточным, вы можете сделать это просто:
<div>
<img [src]="(avatarUrl$ | async) || 'avatar-default.png'">
</div>
Или изменить наблюдаемое в вашем компоненте:
readonly avatarUrl$ = this.getAvatarFromSomeWhere().pipe(
startWith('avatar-default.png')
);
<div>
<img [src]="avatarUrl$ | async">
</div>
Тогда вам не нужно ничего делать ||
и просто держите шаблон простым. Этот способ работает только в том случае, если вы уверены, что запрос вернет аватар в конечном итоге
В противном случае вы можете немного расширить его, используя map
, который гарантирует, что он всегда вернет значение:
private readonly defaultAvatar = 'avatar-default.png';
readonly avatarUrl$ = this.getAvatarFromSomeWhere().pipe(
map((avatar) => avatar || this.defaultAvatar),
startWith(this.defaultAvatar)
);
edit
@ C_Ogoo прав, я должен был прочитать лучше.
В случае, если вы хотите, чтобы он показывался только после загрузки, вы простонужно изменить наблюдаемое так:
readonly avatarUrl$ = this.getAvatarFromSomeWhere().pipe(
map((avatar) => avatar || 'avatar-default.png')
);
и шаблон можно сделать так:
шаблон
<div *ngIf="avatarUrl$ | async as avatarUrl">
<img [src]="avatarUrl">
</div>