Элемент списка материалов Angular не работает с асинхронным конвейером, который содержит delay ()

У меня mat-nav-list выглядит так:

<mat-nav-list>
    <mat-list-item *ngFor = "let draft of drafts$() | async">
        <ng-container *ngIf = "getImageUrl$(draft) | async as imageUrl">
            <img matListAvatar [src] = "imageUrl">
        </ng-container>
        <h1 matLine>{{draft.name}}</h1>
        <p matLine>{{draft.description}}</p>
    </mat-list-item>
</mat-nav-list>

Почему <img matListAvatar [src] = "imageUrl"> не отображает изображение, если getImageUrl$(draft) содержит pipe(delay())? Я использую задержку для имитации фактического вызова асинхронной службы.

Вы можете попробовать stackblitz демо здесь. Настройте демонстрацию, чтобы увидеть ожидаемое поведение без delay().

Это ошибка / поведение async pipe или mat-list-item или проблема с моим кодом?

Я думаю, это как-то связано с обнаружением изменений. Когда вы добавляете tap(console.info) к вашему Observable, вы увидите бесконечное количество операторов журнала, что означает, что getImageUrl$(draft) будет отозван, как только Observable завершит работу (то есть после задержки).

Kim Kern 13.06.2018 11:27

Я заставил его работать, запустив его за пределами NgZone, а затем вручную запустив обнаружение изменений. Должно быть лучшее решение, но, возможно, это поможет: stackblitz.com/edit/angular-so-async-pipe-delay-xokvdk?file=‌ app /…

Kim Kern 13.06.2018 11:44

Я хотел использовать асинхронный канал, потому что код выглядит чистым, но для этого сценария он не будет таким чистым (особенно при переходе к магическим вещам NgZone, хе-хе). В этом случае я вернусь к стилю без асинхронного канала. Цените вашу помощь и находки. :-)

kctang 14.06.2018 03:27
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
3
454
0

Другие вопросы по теме