У меня возникли проблемы с созданием плагина wordpress на основе swiper и vue. js, работающего правильно. Я создал виджет, который будет отображать ленту instagram publi c, используя JSON. Чтобы сделать его более реактивным, я использовал Vue. js fo l oop поверх данных, которые будут предоставлены фидом, и это работает правильно. У меня странная проблема с vue. js и swiper, навигационные стрелки не будут работать, и я не знаю почему. Я думаю, что это может быть связано с инициализацией swiper или vue, которая заполняет div изображениями, используя v-for слишком поздно. У меня есть метод, который вызывает axios.get
для извлечения данных, этот метод вызывается внутри смонтированного свойства моего экземпляра vue. можно ли это исправить?
<div class="swiper-container swiper-feed" id="ig-feed">
<div class="swiper-wrapper">
<div v-for="img in feedImg" class="swiper-slide feed-img" v-bind:style="{ backgroundImage: 'url('+img.url+')' }"></div>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
// JS
(function($){
$(document).ready(function(){
//console.log(igfeed);
const feedSwiper = new Swiper('.swiper-feed', {
slidesPerView: 4,
spaceBetween: 50,
slidesPerGroup: 4,
loop: true,
autoplay: {
delay: 5000
},
//loopFillGroupWithBlank: true,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
console.log('done');
// var mySwiper = document.querySelector('.swiper-feed').swiper
//
// // Now you can use all slider methods like
// mySwiper.slideNext();
const igFeed = new Vue({
el: '#ig-feed',
data: {
feedImg: []
},
mounted: function(){
axios.get(igfeed.profile_url).then( (response) => {
console.log(response);
response.data.graphql.user.edge_owner_to_timeline_media.edges.forEach( (item ,i) => {
//console.log(item.node.display_url);
f = {
url: item.node.display_url
};
this.feedImg.push(f);
});
});
},
methods: {
prevSlide: function(){
//var feedSwiper = document.querySelector('.swiper-feed').Swiper;
//console.log(feedSwiper);
feedSwiper.slidePrev();
console.log('clicked prev');
},
nextSlide: function(){
feedSwiper.slideNext();
}
}
});
});
}(jQuery));