【发布时间】:2016-05-06 16:13:12
【问题描述】:
所以我尝试在 vue 组件中使用 slick.js 轮播插件。这在没有嵌套的 vue 组件时有效。但是,我尝试使用 slick 用于幻灯片轨道的嵌套 div 包装的那一刻是构建的,但在重复之外。基本上专辑只是迭代专辑列表并将所有参数传递给子专辑。一切都已启动,光滑工作,组件工作,但它们不在滑轨内,这意味着它们没有得到轮播处理。
我研究了指令、插槽等,但无济于事,没有关于此的信息。
这是我的 HTML:
<div class="albums-component">
<div class="albums-container" v-slick>
<album v-for="album in albums.data"
:album="album"
file-types="audio,video,image"
:fixed-size="fixedSize"
:show-rotator="showRotator"
:display-limit="3"
:columns-lg="columnsLg"
:columns-md="columnsMd"
:columns-sm="columnsSm"
:center-images="centerImages"
:presenter-enabled="true"
:manage-enabled="manageEnabled">
</album>
</div>
<button class="left add-button" v-on:click="createAlbum"> + </button>
</div>
这是我的 slick 指令:
Vue.directive('slick', {
twoWay: true,
priority: 1000,
params: ['options'],
bind: function () {
var self = this;
setTimeout(function(){
$(self.el).slick({
slidesToShow: 1,
slidesToScroll: 1,
elementsExist: true,
arrows: false,
fade: true
});
}, 1000);
},
update: function (value)
{
},
unbind: function ()
{
}
});
我不会发布专辑组件以保持这篇文章简短,因为它很长(在道具、方法等方面)
任何关于我如何在不使用 VueJS 编写新的轮播组件的情况下实现这一点的见解将不胜感激!
我能够通过添加具有 500 毫秒延迟的 setTimeout() 来使其工作...不过,这似乎不太可靠,是否有一个钩子可以说明何时编译直接组件以及所有子组件?
【问题讨论】:
-
还想指出,我尝试这样做。$nextTick() 用于启动插件,但仍然无法使其正常工作。
-
您是否尝试在不使用指令的情况下使用 attach() 挂钩?示例:attached () { this.els.slickEl.slick(...) },我只是建议这样做,因为它通常可以正常工作而且我从未使用过指令。
-
是的,我也试过了
-
激活阶段有可能是自顶向下的,需要等待子组件被激活/渲染。如果这是问题所在,并且您找到了解决方案,请发布(可能有用),我会尝试先在 activate 中使用 Vue.nextTick()。
-
我会尝试将
v-slick指令转换为组件,并在初始化后将album组件$dispatch设为一个事件。一旦slick组件接收到所有预期的初始化事件,然后初始化 slick。
标签: javascript jquery vue.js