为什么这个 Swiper onReachEnd 回调在 Ionic Slides 中触发两次?

Why is this Swiper onReachEnd callback firing twice in Ionic Slides?

为什么这个 Swiper onReachEnd 回调被执行了两次?

我正在使用 Ionic Slides,我的堆栈有 3 个页面:根页面、主幻灯片页面和辅助幻灯片页面。当我到达末尾时,辅助幻灯片页面应该关闭:

@Component({
  templateUrl: 'app/secondary-slides.html'
})
export class SecondarySlidesPage {
  sliderOptions = {
    onReachEnd: () => { this.nav.pop(); },
  };

  constructor(private nav: NavController) { }
}

上面的工作,除了 onReachEnd 回调被调用两次,所以 两个 页面从堆栈中弹出,关闭辅助幻灯片页面 主要幻灯片页面,将我带回根页面。主要幻灯片页面如下所示:

@Component({
  templateUrl: 'app/slides.html'
})
export class SlidesPage {
  sliderOptions = { };

  constructor(private nav: NavController) { }

  public secondarySlides() {
   this.nav.push(SecondarySlidesPage); 
  }
}

这里 plunker 演示了这个问题。

如何避免弹出两个页面?如果这是一个错误,是在 Ionic 中还是在 Swiper 中?

作为解决方法,我可以在第一次使用后取消设置回调。

@Component({
  templateUrl: 'app/secondary-slides.html'
})
export class SecondarySlidesPage {
  @ViewChild('slides') slides:Slides;

  sliderOptions = {
    onReachEnd: () => {
      this.slides.slider.params.onReachEnd = undefined;
      this.nav.pop();
    },
  };

  constructor(private nav: NavController) { }
}

发生的事情是,当删除辅助幻灯片页面时,单个幻灯片组件将被销毁。这会自动更新 slider 对象,该对象现在位于新的结束幻灯片并再次触发回调。我修改了 Ionic 幻灯片以删除 Slide.ngOnDestroy 中的 rapidUpdate 调用,问题就消失了。

我没想到在最终决定 post 一个问题后这么快就弄明白了。 Bug report here.

这个答案可以帮助其他人

我在 ionSlideReachEnd 函数中所做的是询问 for 循环中的 var,如果它未定义则 return false,这就是函数的方式一开始没有开火两次

示例:

<ion-slides (ionSlideReachEnd)="exampleSlideEnd()">
    <ion-slide *ngFor="let sl of slides">

并在您的 .ts 控制器中

exampleSlideEnd(){

  if( this.slides == undefined) return false;
  this.callOtherFunction();
}