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

时间:2016-12-23 16:54:53

标签: angular ionic-framework ionic2 swiper

为什么这个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

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

1 个答案:

答案 0 :(得分:0)

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

@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幻灯片以移除rapidUpdate中的Slide.ngOnDestroy来电,问题就消失了。

在最终决定发布问题之后,我没想到能够如此迅速地解决问题。 Bug report here