javascript - VueJS路由相同的组件不触发OWL Carousel

标签 javascript vue.js ecmascript-6 vuejs2 vue-router

你好

我在使用不同变量加载相同组件时重新评估 VueJS 渲染的图像到 Carousel 插件 (OwlCarousel) 时遇到这个问题

问题是,当加载带有图像的页面时,一切正常,轮播可以显示图像,但是当单击链接转到包含其他图像的同一组件时,轮播仅显示一个空框。

这是我到目前为止所拥有的:

<template>
    <div>
        <div id="owl-work">
            <div class="item" v-for="image in project.images" :key="image.id">
                <figure><img :src="'uploads/'+image.url" alt=""></figure>
            </div>
        </div>
        <div class="similars" v-for="similar in similars">
            <router-link :key="$route.fullPath" :to="{ name: 'project', params: { id: similar.id, project:similar }}" replace>
                <h4>{{similar.title}}</h4>
            </router-link>
        </div>
    </div>
</template>
<script>
export default {
    props: ["id"],
    computed: {
        ...mapGetters(['getProject', 'getSimilars']),
        project() {
            return this.getProject(this.id)
        },
        similars() {
            return this.getSimilars(this.id)
        }

    }
}
$("#owl-work").owlCarousel();
</script>

我的路线如下:

[
  {name: 'projects', path: '/projects', component: ProjectsScreen},
  {name: 'project', path: '/project/:id', component: ProjectScreen, props: true},
]

所以问题是当点击<router-link>时如何将“相似”的项目图像加载到轮播中它在相同的组件中输出结果。

PS:其他字段已更改,并且在摆脱轮播时它可以工作,因此轮播本身的设置以及 VueJS 如何处理路由或类似的东西是确定的..

最佳答案

将 owl 初始化移至生命周期钩子(Hook),以便在路由更改时再次执行:

<script>
export default {
    props: ["id"],
    computed: {
        ...mapGetters(['getProject', 'getSimilars']),
        project() {
            return this.getProject(this.id)
        },
        similars() {
            return this.getSimilars(this.id)
        }

    },
    mounted() {
        $("#owl-work").owlCarousel();
    }
}
// Removed from here
</script>

或者,更好的是,不再需要从 id 进行访问,而是使用 ref

<template>
    <div>
        <div ref="owlwork">
            <div class="item" v-for="image in project.images" :key="image.id">
                <figure><img :src="'uploads/'+image.url" alt=""></figure>
            </div>
        </div>
        <div class="similars" v-for="similar in similars">
            <router-link :key="$route.fullPath" :to="{ name: 'project', params: { id: similar.id, project:similar }}" replace>
                <h4>{{similar.title}}</h4>
            </router-link>
        </div>
    </div>
</template>
<script>
export default {
    props: ["id"],
    computed: {
        ...mapGetters(['getProject', 'getSimilars']),
        project() {
            return this.getProject(this.id)
        },
        similars() {
            return this.getSimilars(this.id)
        }

    },

    mounted() {
        $(this.$refs.owlwork).owlCarousel();
    }
}
// Removed from here
</script>

关于javascript - VueJS路由相同的组件不触发OWL Carousel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49958414/

相关文章:

javascript - 如何一次在 Javascript Map 中设置多个值?

javascript - 如何将 CANVAS 的 X 轴或水平轴设置回 0

javascript - Angular2 条件表单验证器

javascript - Angular 2 - ES6 - 根据复选框值触发表单验证器

typescript :不能在模块外使用导入语句

javascript - Axios GET 请求忽略响应 Cache-Control max-age

javascript - React Native 接收新的 props,componentWillReceiveProps

javascript - FileReader readAsText 将文件内容作为字符串存储在结果属性中,但是当 console.log 这个结果时,没有返回任何内容。

javascript - 在 Vue 中添加 "close modal"按钮的更好方法

javascript - Vue中如何实现任意两个元素之间的通信?