Я использую библиотеку swiper .В ссылке сверху API вы можете обнаружить, что mySwiper.activeIndex
возвращает правильно выбранный слайд.То, что я хочу сделать, это обновлять мой сервис каждый раз, когда меняется слайд, чтобы мое приложение знало, какой слайд выбран в других частях (с помощью общего доступа к сервису).
Итак, я хотел использовать ngOnChanges
, что предполагаетобнаруживать каждое изменение в компоненте, но он не обнаруживает смену слайдов, потому что мой код ничего не делает.Код:
import { Component, OnInit, AfterViewInit, OnChanges } from '@angular/core';
import Swiper from 'swiper';
import {TouchService} from "../../services/touch.service";
@Component({
selector: 'app-nav',
templateUrl: './nav.component.html',
styleUrls: [ './nav.component.scss' ]
})
export class NavComponent implements AfterViewInit, OnChanges, OnInit {
mySwiper: Swiper;
slides = [
'Slide1',
'Slide2',
'Slide3',
'Slide4',
'Slide5',
'Slide6'
];
constructor(private touchService: TouchService) {}
ngAfterViewInit() {
this.mySwiper = new Swiper('.nav', {
paginationClickable: false,
grabCursor: true,
loop: true,
slidesPerView: 3,
spaceBetween: 50
});
this.mySwiper.on('touchStart', () => {
this.touchService.triggerTouchStart();
});
this.mySwiper.on('touchEnd', () => {
this.touchService.triggerTouchStop();
});
}
ngOnChanges(changes) {
console.log(changes);
}
ngOnInit() {
setTimeout(() => {
alert(this.mySwiper.activeIndex);
}, 4000);
}
}
В этом коде setTimeout работает правильно и показывает мне текущий выбранный слайд через 4 секунды после загрузки приложения.Но этот ngOnChanges(changes) {
, кажется, никогда не запускается, потому что я не вижу console.logs.
Почему ngOnChanges не перехватывает mySwiper
изменения?Что я могу сделать, чтобы обнаружить такие изменения?