nowIndex =
является ошибкой, потому что нет переменной nowIndex
, а свойство класса nowIndex
всегда должно указываться как this.nowIndex
.
В документации говорится:
Обратите внимание, что это ключевое слово в обработчике событий всегда указывает на экземпляр Swiper
Поскольку этот ответ объясняет, что это проблема проектирования библиотеки, которая полагаетсяна this
в обратных вызовах;функция не может использовать контексты компонента this
и swiper this
одновременно. Эту проблему можно решить либо с помощью взлома self = this
, либо связав сигнатуру функции с одним из этих контекстов и заставив ее принять другой в качестве параметра.
Это можно сделать с помощью вспомогательной функции, как предложено в этот ответ :
function contextWrapper(fn) {
const self = this;
return function (...args) {
return fn.call(self, this, ...args);
}
}
export default class Random extends Vue {
nowIndex: number = -1;
swiperOption?: any;
created() {
this.swiperOption = { /*...*/
on: {
click: contextWrapper((swiperInstance: any) => {
this.nowIndex = swiperInstance.clickedSlide.dataset.key;
})
}
};
}
}
Или, используя взлом, в этом случае this
семантика идет не так:
export default class Random extends Vue {
nowIndex: number = -1;
swiperOption?: any;
created() {
const self = this;
this.swiperOption = { /*...*/
on: {
click(this: any) {
self.nowIndex = this.clickedSlide.dataset.key;
})
}
};
}
}