6

我有一个已经实施了离子幻灯片的 Ionic 4 项目。一切都很好,直到最近对 Ionic 进行了更新(不到一个月前),他们突然停止了工作。

在第一次加载时,它们似乎很好,但之后的任何加载:

  • 寻呼机不工作或出现
  • 图像大小不正确
  • 滚动有效,但不会像应有的那样将幻灯片捕捉到中心

第一次加载工作: 离子幻灯片的图像如预期

第二次加载没有: 离子载玻片损坏的图像

没有错误消息或警告,并且截至 1 个月前,以下所有代码都可以正常工作,此后没有进行任何更改。它只是随机坏了。

HTML:

<ion-slides #slides pager="true">
  <ion-slide *ngFor="let option of options; let i = index">
    <ion-card mode="md" [ngStyle]="{'background': borderColors[i]}">
      <img style="object-fit: contain; border-radius: 20px; padding: 2px;" [src]="option.imageUrl">
    </ion-card>
  </ion-slide>
</ion-slides>

TS:

import { Component, Input, ViewChild } from "@angular/core";
import { IonSlides } from "@ionic/angular";
import { ContestOption } from "src/app/models/contest-model";

@Component({
  selector: "app-results-swiper",
  templateUrl: "./results-swiper.component.html",
  styleUrls: ["./results-swiper.component.scss"]
})
export class ResultsSwiperComponent {
  @Input() options = [
    { id: "null", imageUrl: "null", votes: 0 },
    { id: "null", imageUrl: "null", votes: 0 }
  ] as Array<ContestOption>;
  @Input() borderColors = [];

  @ViewChild("slides", null) slides: IonSlides;

  constructor() {}
}

我尝试进一步隔离问题。这个 HTML 仍然失败:

<ion-slides #slides pager="true" [options]="slidesOpts">
  <ion-slide>
    Hello
  </ion-slide>
  <ion-slide>
    Hello Again
  </ion-slide>
</ion-slides>

重申一下,关于这个组件的一切都在不久前工作。然后,在最近的一次更新中,我开始在我的项目中看到 Ionic CSS 弃用警告。它们看起来像这样:

[DEPRECATED][CSS] Ionic CSS attributes are deprecated.
Replace:
'<div text-center>'

With:
'<div class="ion-text-center">'

自那次更新以来,离子滑道破裂并决定停止工作。请帮忙!

4

1 回答 1

17

通过更广泛的错误测试,我发现问题不在于 ion-slides,而实际上与页面加载有关。我没有提供足够的信息来解决问题。

离子幻灯片以离子模式打开,这导致幻灯片在页面完成加载之前呈现。我的解决方案是这样的:

  1. 在 TS 文件中创建一个变量viewEntered = false;
  2. 使用 Ionic 生命周期钩子,检测视图何时完成进入
ionViewDidEnter() {
    this.viewEntered = true;
}
  1. 使用 ngIf,在离子幻灯片上检测视图是否以 HTML 格式输入。
<my-custom-component *ngIf="viewEntered"></my-custom-component>
于 2019-11-24T15:15:09.543 回答