我正在尝试添加一个JQuery插件,猫头鹰轮播到一个使用Vuejs呈现的列表中。
HTML格式
<h4>1. Vuejs rendered items with OWL Carousel (not working)</h4>
<div id="user" class="owl-carousel">
<div class="item" v-for="user in users">{{ user.name }}</div>
</div>
<h4>2. Pure HTML with OWL Carousel (working)</h4>
<div class="owl-carousel">
<div class="item">Sunny</div>
<div class="item">Michel</div>
<div class="item">Daneil</div>
<div class="item">Sony</div>
</div>
JS的编号
var list = new Vue({
el: '#user',
data: {
users: []
},
methods: {
listUsers: function() {
var users = [
{
id: 1,
name: 'John'
},
{
id: 2,
name: 'Deo'
},
{
id: 3,
name: 'Anjela'
},
{
id: 4,
name: 'Samantha'
}
];
this.$set('users', users);
},
installOWLcarousel: function() {
$('.owl-carousel').owlCarousel();
}
},
ready: function() {
this.listUsers();
this.installOWLcarousel();
}
});
您可以从以下位置找到完整的代码:https://jsfiddle.net/v18yjmuq/12/
我看JQuery在Vuejs呈现列表之前已经完成了它的执行。如何避免这个问题?我可以在完全呈现Vuejs for循环项之后运行JQuery吗?
4条答案
按热度按时间mf98qq941#
当使用需要DOM的jQuery插件时,应该使用Vue.nextTick。
在vue.js文档中:
延迟回调,使其在下一个DOM更新周期之后执行。在更改了一些数据以等待DOM更新之后立即使用它。
在您的情况下,您应该使用ready()方法的下列实作:
编辑:对于Vue 2,使用
mounted()
或created()
dfuffjeb2#
将引用属性添加到#user元素,如下所示
然后在添加挂载方法到Vue组件中:
abithluo3#
nextTick在大多数情况下都可以工作,或者,你可以在内置的updated()方法中编写代码。
qgelzfjb4#
这真的很有意思。我认为渲染DOM需要一些时间,因此carourol失败了。这里我添加了一个
setTimeout
来添加可忽略的延迟和它的工作:https://jsfiddle.net/v18yjmuq/13/