Ionic 有条件渲染时,离子滑动器不起作用

hwamh0ep  于 2023-10-14  发布在  Ionic
关注(0)|答案(1)|浏览(130)

我使用离子7和刷卡组件如下

<ng-container *ngIf="core.loggedIn === true">
    <swiper-container #swiper (afterinit)="swiperReady()" [pagination]="true">
      <swiper-slide style="height: 600px;">
        <ion-row>
          <ion-col class="ion-text-center">
            <ion-button class="ban-half-button" (click)="goNext()">Go</ion-button>
          </ion-col>
        </ion-row>
      </swiper-slide>
      <swiper-slide>
        <ion-row>
          <ion-col class="ion-text-center">
            <ion-button class="ban-half-button" (click)="goNext()">Next</ion-button>
          </ion-col>
        </ion-row>
      </swiper-slide>
 </swiper-container>
  </ng-container>

goNext和.ts上的代码是

import { Swiper } from 'swiper';

export class Tab1Page {

  @ViewChild('swiper')
  swiperRef: ElementRef | undefined;
  swiper?: Swiper;
goNext() {
    this.swiper?.slideNext();
  }

  swiperReady() {
    this.swiper = this.swiperRef?.nativeElement.swiper;
  }
}

当我在上面的代码中单击goNext()时,这没有任何作用。但是,如果我去掉条件

*ngIf="core.loggedIn === true"

然后它开始工作。我能感觉到这里发生了什么,由于条件变为真时的延迟,刷卡器没有初始化。但我不知道如何解决这个问题?

1rhkuytd

1rhkuytd1#

解决这个问题的一种方法是使用 *ngIf else语法,仅在条件为true时呈现swiper容器,并在条件为false时显示加载器或空div。这将允许swiper在渲染之前进行初始化,以确保其正常工作。

<ng-container *ngIf="core.loggedIn; else showError">
  <swiper-container #swiper (afterinit)="swiperReady()" [pagination]="true">

  </swiper-container>
</ng-container>
<ng-template #showError>
  <ion-spinner></ion-spinner> <!-- or any other loader -->
</ng-template>

相关问题