I was a little bit confused as I saw in ide that this is a promise. If I read the doc, I am not really expecting to get a promise. https://beta.ionicframework.com/docs/api/slides/#methods
The doc is imho really confusing and bad. If I compare for example to material.io, which is also not a hit (because It has only trivial examples), but it is much more better, because it works.
For example, in case you have set allowTouchMove: false inside of the <ion-slides> options and allow navigating only with buttons (for example with <ion-fab>), try this solution:
import { Component, OnInit, ViewChild } from '@angular/core';
import { IonSlides } from '@ionic/angular';
export class MyPage implements OnInit {
// Get the `<ion-slides>` node from the Markup
@ViewChild (IonSlides) protected slider: IonSlides;
/** @var {number} sliderIndex Reflects the current index of the `slider`, starting at the first slide (0) */
protected sliderIndex: number = 0;
/** @var {object} sliderOptions Contains the options for the slider */
protected sliderOptions: object = {
allowTouchMove: false
};
[...]
constructor() {}
[...]
/**
* @protected
* @async
* @function slideDidChange
* @description Function to emit, when the slider has changed (navigated)
* @return {Promise<void>}
*/
protected async slideDidChange(): Promise<void> {
this.sliderIndex = await this.slider.getActiveIndex();
return Promise.resolve();
}
}
Now you can adapt “old” Ionic 3 Functions to the behaviour of Ionic 4, something like this:
this.slider.isBeginning(); -> this.sliderIndex === 0
this.slider.isEnd(); -> this.sliderIndex === [insert index of your last slide here]
In Action
<ion-fab horizontal="start" vertical="bottom">
<ion-fab-button
(click)="this.slideTo('prev')"
[hidden]="this.sliderIndex === 0" // Example to hide the Button
[disabled]="this.sliderIndex === 0"> // Example to disable the Button
<ion-icon name="arrow-back"></ion-icon>
</ion-fab-button>
</ion-fab>
Oh, you want to know more about the this.slideTo('prev') Function? Sure, here you go:
/**
* @protected
* @async
* @function slideTo
* @description Function to trigger a slide with some additional logic
* @param {'prev' | 'next'} direction The direction, where we should swipe to
* @return {Promise<void>}
*/
protected async slideTo(direction: 'prev' | 'next'): Promise<void> {
const currentSlideIndex: number = await this.slider.getActiveIndex();
if (direction === 'next') {
await this.slider.slideNext();
// Additional Logic, depending on the current slide index
if (currentSlideIndex === 0) {
// Maybe some Tracking here?
} else if (currentSlideIndex === 1) {
// Or additional markup logic here?
} else if (currentSlideIndex === 2) {
// Nah? Okay :(
} else if (currentSlideIndex === 3) {
// But here!
}
} else if (direction === 'prev') {
await this.slider.slidePrev();
if (currentSlideIndex === 1) {
// Maybe some Tracking here?
} else if (currentSlideIndex === 2) {
// Or additional markup logic here?
} else if (currentSlideIndex === 3) {
// Nah? Okay :(
} else if (currentSlideIndex === 4) {
// But here!
}
}
return Promise.resolve();
}