У меня есть своего рода «слайд-шоу», состоящее из всплывающих окон в шаблоне vue. js, где каждый слайд является отдельным компонентом, а родительский компонент вызывает каждый слайд в «for» l oop. Пользователи переходят от одного слайда к другому, нажимая кнопку внутри компонента. То, как я сейчас это настроил, когда родитель вызывает 'активирует' слайд через this.$refs
, он переключает класс, чтобы сделать слайд видимым, затем создает слушателя внутри обещания, разрешая это обещание только тогда, когда слушатель активирован. Я уверен, что есть лучший способ сделать это, так как кажется, что мой код нарушает некоторые неписаные правила Javascript, определяя слушателя внутри обещания. Однако я не могу придумать лучшего способа, поскольку я относительно новичок в JS и Vue. Любая помощь или совет приветствуются.
Компонент называется «Инструкция», поскольку я использую его для объяснения различных частей моего приложения.
Кнопка для перемещения слайда: <button v-on:submit.prevent name="button-text" :id="'next-instruction-button-'+index">Next</button>
Код в компоненте Instruction
, который используется для активации и деактивации содержимого:
handleClick() {
return new Promise(res => {
var popup = document.getElementById(`myPopup-${this.index}`);
popup.classList.toggle("show");
/* Not totally sure what I've built here, but it works */
new Promise(resolve => {
document.querySelector(`#next-instruction-button-${this.index}`).addEventListener('click', () => {
return resolve();
})
})
.then(() => {
popup.classList.toggle("show");
res();
})
})
},
Вызов из родительской функции:
async showInstructions() {
for (let i = 1; i <= this.numInstructions; i++) {
console.log(i)
await this.$refs[`instruction-${i}`].handleClick();
}
},
Код для каждого слайдов изначально здесь