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