Ион-бесконечная прокрутка новых нажатых изображений не загружается

У меня есть сетка для отображения изображений, я пытаюсь использовать ion-infinite-scroll, чтобы загружать больше изображений, когда пользователь прокручивает вниз. Я запускаю событие под названием «loadMorePosts», которое заставляет вызов api получать следующий набор изображений и добавлять его в массив, используемый в представлении. Моя проблема в том, что добавленные изображения не загружаются, похоже, что "src" элемента ion-img не устанавливается.

Ниже мой html-код

      <ion-content>
  <!-- <ion-searchbar showCancelButton="focus" (ionInput)="searchNeighbourHoodWithSearchTerms($event)"></ion-searchbar> -->
  <ion-searchbar #searchBar animated="true" (ionInput)="searchNeighbourHoodWithSearchTerms($event)"></ion-searchbar>
  <ion-slides pager="false" [options]="slideOpts">
    <ion-slide *ngFor="let category of userPreferredBlogCategories;">
      <ion-button id= {{category.categoryName}} class="categoryTabs ion-focused" (click)="searchNeighbourHoodWithCategory(category.categoryName)">{{category.categoryName}}</ion-button>
      </ion-slide>
  </ion-slides>
  <ion-grid>
    <ion-row>
        <ion-col size="auto" *ngFor="let img of neighbourhoodPosts index as i;">
          <ion-img class="neighbourhood-img" [src]="img.blobUrl" (click)="viewdetails(i)"></ion-img>
          <!-- <ion-label style="color: red; margin-top: 20%;">{{img.caption}}</ion-label> -->
        </ion-col>    
    </ion-row>
  </ion-grid>
   <ion-infinite-scroll threshold="100px" (ionInfinite)="loadMorePosts($event)">
    <ion-infinite-scroll-content loadingSpinner="bubbles" loadingText="Loading more data...">
    </ion-infinite-scroll-content>
  </ion-infinite-scroll>
</ion-content>

Ниже приведен метод, вызываемый ion-infinite-scroll.

         async loadMorePosts(evt) {
        setTimeout(() => {
          if (this.currentSearchTerms != null) {
            this.apiHandler.GetNeighbourhoodFeed(this.currentSearchTerms, false, true, "").subscribe((response) => {
              this.neighbourhoodPosts.push(response);
              evt.target.complete();
            });
          }    
        }, 1000);
      }

Вот как это выглядит, когда новые изображения помещаются в массив

Кажется, я не могу понять, что заставляет новые изображения не загружаться. Любая помощь будет оценена по достоинству. Спасибо за уделенное время.

1 ответ

Полное демо Вы можете узнать в этой демо Ссылка Stackblitz

Вы должны использовать тему rxjs с функцией concatemap оператора rxjs с оператором сканирования. По сути, сначала вы вызываете изображение API-интерфейса первой страницы, а затем, когда пользователь достигает конечной позиции, функция бесконечной прокрутки вызывает функцию загрузки другого изображения API-интерфейса с сервера, в то время вам просто нужно передать информацию объекту, и вызывается начальный канал потока к следующему фрагменту данных изображения API с сервера.

      neighbourhoodPosts = this.page$.pipe(
  concatMap(({ page, limit }) => this.loadImageData(page, limit)),
  scan((acc: any[], items: any[]) => [...acc, ...items])
);

  loadImageData(page, limit) {
    return this.http
     .get(`https://picsum.photos/v2/list?page=${page}&limit=${limit}`)
     .pipe(tap((data) => console.log(data)));
  }

  loadMorePosts(event) {
     this.page += 1;
     this.page$.next({ page: this.page, limit: this.limit });
     event.target.complete();
  }

и таким образом вам нужно только подписаться на наблюдаемый из html, используя асинхронный канал, как показано ниже...

         <ion-col
      size="auto"
      *ngFor="let img of neighbourhoodPosts | async; index as i"
   >

и остальное будет работать так, как вам нужно. Благодарю вас.

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