Swiper Angular plugin is available only via NPM as a part of the main Swiper library:
npm i swiper@6
import { SwiperModule } from 'swiper/angular';
@NgModule({
imports: [SwiperModule],
})
export class YourAppModule {}
Import Swipers CSS in styles.scss
@import '~swiper/swiper-bundle';
Or you can import only modules that you need Swiper package contains different sets of CSS, Less and SCSS styles:
CSS styles available only for bundle version:
swiper-bundle.css - all Swiper styles including all modules styles (like Navigation, Pagination, etc.)swiper-bundle.min.css - same as previous but minifiedLess styles are separate styles for core version and modules:
swiper.less - only core Swiper stylescomponents/a11y/a11y.less - styles required for A11y modulecomponents/controller/controller.less - styles required for Controller modulecomponents/effect-coverflow/effect-coverflow.less - styles required for Coverflow Effect modulecomponents/effect-cube/effect-cube.less - styles required for Cube Effect modulecomponents/effect-fade/effect-fade.less - styles required for Fade Effect modulecomponents/effect-flip/effect-flip.less - styles required for Flip Effect modulecomponents/lazy/lazy.less - styles required for Lazy modulecomponents/navigation/navigation.less - styles required for Navigation modulecomponents/pagination/pagination.less - styles required for Pagination modulecomponents/scrollbar/scrollbar.less - styles required for Scrollbar modulecomponents/thumbs/thumbs.less - styles required for Thumbs modulecomponents/zoom/zoom.less - styles required for Zoom moduleSCSS styles are also separate styles for core version and modules:
swiper.scss - only core Swiper stylescomponents/a11y/a11y.scss - styles required for A11y modulecomponents/controller/controller.scss - styles required for Controller modulecomponents/effect-coverflow/effect-coverflow.scss - styles required for Coverflow Effect modulecomponents/effect-cube/effect-cube.scss - styles required for Cube Effect modulecomponents/effect-fade/effect-fade.scss - styles required for Fade Effect modulecomponents/effect-flip/effect-flip.scss - styles required for Flip Effect modulecomponents/lazy/lazy.scss - styles required for Lazy modulecomponents/navigation/navigation.scss - styles required for Navigation modulecomponents/pagination/pagination.scss - styles required for Pagination modulecomponents/scrollbar/scrollbar.scss - styles required for Scrollbar modulecomponents/thumbs/thumbs.scss - styles required for Thumbs modulecomponents/zoom/zoom.scss - styles required for Zoom moduleimport { Component } from '@angular/core';
// import Swiper core and required modules
import SwiperCore from 'swiper/core';
@Component({
selector: 'app-swiper-example',
template: `
<swiper
[slidesPerView]="3"
[spaceBetween]="50"
(swiper)="onSwiper($event)"
(slideChange)="onSlideChange()"
>
<ng-template swiperSlide>Slide 1</ng-template>
<ng-template swiperSlide>Slide 2</ng-template>
<ng-template swiperSlide>Slide 3</ng-template>
</swiper>
`,
})
export class AppComponent {
onSwiper(swiper) {
console.log(swiper);
}
onSlideChange() {
console.log('slide change');
}
}
Virtual - Virtual Slides moduleKeyboard - Keyboard Control moduleMousewheel - Mousewheel Control moduleNavigation - Navigation modulePagination - Pagination moduleScrollbar - Scrollbar moduleParallax - Parallax moduleZoom - Zoom moduleLazy - Lazy moduleController - Controller moduleA11y - Accessibility moduleHistory - History Navigation moduleHashNavigation - Hash Navigation moduleAutoplay - Autoplay moduleEffectFade - Fade Effect moduleEffectCube - Cube Effect moduleEffectFlip - Flip Effect moduleEffectCoverflow - Coverflow Effect moduleThumbs - Thumbs moduleimport { Component } from '@angular/core';
// import Swiper core and required modules
import SwiperCore, {
Navigation,
Pagination,
Scrollbar,
A11y,
} from 'swiper/core';
// install Swiper modules
SwiperCore.use([Navigation, Pagination, Scrollbar, A11y]);
@Component({
selector: 'app-swiper-example',
template: `
<swiper
[slidesPerView]="3"
[spaceBetween]="50"
(swiper)="onSwiper($event)"
(slideChange)="onSlideChange()"
[navigation]="true"
[pagination]="{ clickable: true }"
[scrollbar]="{ draggable: true }"
>
<ng-template swiperSlide>Slide 1</ng-template>
<ng-template swiperSlide>Slide 2</ng-template>
<ng-template swiperSlide>Slide 3</ng-template>
<ng-template swiperSlide>Slide 4</ng-template>
<ng-template swiperSlide>Slide 5</ng-template>
<ng-template swiperSlide>Slide 6</ng-template>
</swiper>
`,
})
export class AppComponent {
onSwiper(swiper) {
console.log(swiper);
}
onSlideChange() {
console.log('slide change');
}
}
Edit on Stackblitz;Swiper Angular component receive all Swiper parameters as component props
Swiper component supports all Swiper events, including additional swiper event that returns swiper instance as soon as posible. For example:
<swiper (swiper)="..." (slideChange)="..." (reachEnd)="..." ...></swiper>
| Prop | Type | Default | Description |
|---|---|---|---|
virtualIndex | number | Actual swiper slide index. Required to be set for virtual slides |
<swiper>
<ng-template swiperSlide>
<div>Slide</div>
</ng-template>
<ng-template swiperSlide *ngFor="let slide of slides">
<div>Slide</div>
</ng-template>
</swiper>
SwiperSlideDirective exports the following variables:
isActive - true when current slide is activeisPrev - true when current slide is the previous from activeisNext - true when current slide is the next from activeisVisible - true when current slide is visible (watchSlidesVisibility Swiper parameter must be enabled)isDuplicate - true when current slide is a duplicate slide (when loop mode enabled)For example:
<swiper>
<ng-template swiperSlide let-data>
<div>Current slide is {{ data.isActive ? 'active' : 'not active' }}</div>
</ng-template>
</swiper>
Swiper Angular component uses "slots" for content distribution. There are 4 slots available
container-start - element will be added to the beginning of swiper-containercontainer-end (default) - element will be added to the end of swiper-containerwrapper-start - element will be added to the beginning of swiper-wrapperwrapper-end - element will be added to the end of swiper-wrapperFor example:
<swiper>
<ng-template swiperSlide>Slide 1</ng-template>
<ng-template swiperSlide>Slide 2</ng-template>
<span slot="container-start">Container Start</span>
<span slot="container-end">Container End</span>
<span slot="wrapper-start">Wrapper Start</span>
<span slot="wrapper-end">Wrapper End</span>
</swiper>
Will be rendered as:
<div class="swiper-container">
<span slot="container-start">Container Start</span>
<div class="swiper-wrapper">
<span slot="wrapper-start">Wrapper Start</span>
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<span slot="wrapper-end">Wrapper End</span>
</div>
<span slot="container-end">Container End</span>
</div>
Virtual Slides rendering here is fully handled by Angular and not required anything except setting [virtual]="true":
import { Component } from '@angular/core';
// import Swiper core and required modules
import SwiperCore, { Virtual } from 'swiper/core';
// install Swiper modules
SwiperCore.use([Virtual]);
@Component({
selector: 'app-swiper-virtual-example',
template: ` <swiper [slidesPerView]="3" [spaceBetween]="50" [virtual]="true">
<ng-container *ngFor="let slide of slides; index as i">
<ng-template swiperSlide>Slide {{ slide }}</ng-template>
</ng-container>
</swiper>`,
})
export class AppComponent {
// Create array with 1000 slides
slides = Array.from({ length: 1000 }).map(
(el, index) => `Slide ${index + 1}`
);
}
Edit on Stackblitz;The following effects are available:
- Fade
- Cube
- Coverflow
- Flip
To use effects you have to import and install them first (as all other modules) (Fade example):
import SwiperCore, { EffectFade } from 'swiper';
SwiperCore.use([EffectFade]);
You can find running effect demos here.
import { Component } from '@angular/core';
// import Swiper core and required modules
import SwiperCore, { EffectFade, Swiper } from 'swiper/core';
// install Swiper modules
SwiperCore.use([EffectFade]);
@Component({
selector: 'app-swiper-fade-example',
template: `
<swiper effect="fade">
<ng-template swiperSlide>Slide 1</ng-template>
<ng-template swiperSlide>Slide 2</ng-template>
<ng-template swiperSlide>Slide 3</ng-template>
</swiper>
`,
})
export class AppComponent {}
Edit on Stackblitz