JUL*_*HAN 6 javascript carousel vue.js
我正在使用vue.js和OwlCarousel,每次我使用旋转木马的v-for时它都没有显示旋转木马的样式,它只显示列中的图像.
这是对API的请求:
<script>
export default {
data: {
videos_p: []
},
mounted() {
axios.get("xxxxxxxxxxx")
.then(response => {
this.videos_p = response.data
console.log(this.videos_p)
})
}
}
$(document).ready(function() {
var owl = $('.owl-carousel');
owl.owlCarousel({
items: 4,
loop: true,
margin: 10,
autoplay: true,
autoplayTimeout: 900,
autoplayHoverPause: true,
responsiveClass: true,
responsive: {
0: {
items: 1,
nav: true
},
600: {
items: 3,
nav: false
},
1000: {
items: 5,
nav: true,
loop: false,
margin: 20
}
}
});
})
</script>
Run Code Online (Sandbox Code Playgroud)
这是html:
<section id="demos">
<div class="row">
<div class="large-12 columns">
<div class="owl-carousel owl-theme">
<div class="item" v-for="video in videos_p">
<img v-bind:src="video.image_url">
</div>
</div>
</div>
</div>
</section>
Run Code Online (Sandbox Code Playgroud)
但每次我使用vue它都没有显示旋转木马它只显示列中的图像,但如果我使用这样的例子它工作正常:
<section id="demos">
<div class="row">
<div class="large-12 columns">
<div class="owl-carousel owl-theme">
<div class="item">
<img src="http://placehold.it/300x150&text=FooBar1">
</div>
<div class="item">
<img src="http://placehold.it/300x150&text=FooBar1">
</div>
<div class="item">
<img src="http://placehold.it/300x150&text=FooBar1">
</div>
<div class="item">
<img src="http://placehold.it/300x150&text=FooBar1">
</div>
<div class="item">
<img src="http://placehold.it/300x150&text=FooBar1">
</div> -->
</div>
</div>
</div>
</section>
Run Code Online (Sandbox Code Playgroud)
我知道哪里弄错了?????
Ani*_*ngh 12
您正在寻找的是Vue-nextTick
发生的事情是JS在axios发送响应之前执行你的$().owlCarousel,因为你不知道何时收到响应你需要等到收到axios的响应然后立即在Vue中执行代码.nextTick();
另一个问题是this没有指向Vue实例,axios()所以你需要创建一个变量并存储this它.
在您的方法中,在调用axios回调后,添加以下内容:
var vm = this; //declare this just BEFORE calling axios();
// The below are inside axios.then()
vm.videos_p = response.data;
Vue.nextTick(function(){
$('.owl-carousel').owlCarousel({
items: 4,
loop: true,
margin: 10,
autoplay: true,
autoplayTimeout: 900,
autoplayHoverPause: true,
responsiveClass: true,
responsive: {
0: {
items: 1,
nav: true
},
600: {
items: 3,
nav: false
},
1000: {
items: 5,
nav: true,
loop: false,
margin: 20
}
}
});
}.bind(vm));
Run Code Online (Sandbox Code Playgroud)
然后完全删除$(document).ready();
我会继续前进并method: {}在VueJS中制作一个,然后调用它installOwlCarousel然后在我的中调用它process.nextTick().就像是:
data: {
....
},
method: {
installOwlCarousel: function(){
$('.owl-carousel').owlCarousel({
//my options
});
},
mounted: function(){
var vm = this;
axios.get('...xx..')
.then((res)=>{
vm.videos_p = res.data;
Vue.nextTick(function(){
vm.installOwlCarousel();
}.bind(vm));
})
.catch((err)=>{
if(err) console.log(err);
});
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.