Vue JS 组件重新附加或缓存

Posted

技术标签:

【中文标题】Vue JS 组件重新附加或缓存【英文标题】:Vue JS Component reattach or Cache 【发布时间】:2017-04-26 19:49:23 【问题描述】:

VueJS 组件在导航后不会被缓存或至少重新附加。在刷新或启动时,所有内容都会被附加并呈现良好,但在导航到另一个页面后又返回。第一个组件 - Carousel - 在我的例子中,组件不会被渲染,但会调用 API。

<template>
<div class="rel">
    <div id="homeCarousel" class="owl-carousel owl-slider">
        <div class="item" v-for="product in featured">
            <div class="bg-holder top-area-half" >
                <div class="bg-mask-lighten"></div>
                <img class="bg-img" v-bind:src="product.feature_image_url">
                <div class="hero-caption">
                    <div class="container">
                        <h3 class="hero-title">product.feature_title</h3>
                        <p class="hero-subtitle">product.feature_subtitle</p>
                        <a class="btn btn-white btn-ghost btn-lg hero-btn" href="#">Shop now</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div id="hero-slider-nav" class="hero-slider-nav">
        <div class="container">
            <div class="pull-right"></div>
        </div>
    </div>
</div>
</template>
<style>

</style>
<script>
export default
    data()
        return
            featured:[]
        
    ,
    ready()

    ,
    mounted()
        this.getFeaturedProducts();
    ,
    components:

    ,
    methods: 
        getFeaturedProducts: function () 
            Vue.http.get('/api/product/filter/featured=1').then(
                (response) => 
                    this.featured = response.body;
                
            )
        
    


</script>

`

<template>
    <div class="global-wrapper clearfix ">
        <keep-alive>
            <Carousel></Carousel>
        </keep-alive>
 //The rest of the code which is just importing the Component

【问题讨论】:

您是否尝试不使用keep-alive 选项?如果它渲染一次并且不再渲染,那么很可能是keep-alive的问题 我试过没有它,但导航回来时它不会呈现 然后您需要使用vue-cli 检查this.featured 的值,以确保它具有您期望的产品数组。如果数组长度为零,那么您将看不到任何显示内容,尽管组件可能会被渲染。 第一次访问页面时,网络选项卡显示作为响应,组件获得了应有的对象数组。导航到另一个页面并返回,第二次发出请求并获得一组对象。所以没有“缺乏数据原因”不渲染。另外,即使它第二次没有获取数据,至少它会在 dom 检查器上显示 v-for 迭代周围的父元素 是的,即使没有数据,您也应该能够在 DOM 检查器中看到父元素。这似乎是路由器配置的问题。您的 Carousel 组件看起来不错。你能在 jsFiddle 中重新创建这个 bug 以便我们看看吗? 【参考方案1】:

我发现我做错了什么。我有一个单独的 JS/JQuery 文件,在准备好的文档上,我正在初始化一个 id #('homeCarousel').owlCarousel() 的猫头鹰轮播。有效的是,因为我已经引导了 owl carousel -> 在挂载的生命周期回调中,我现在将元素作为目标并将其设为 owl carousel。

【讨论】:

以上是关于Vue JS 组件重新附加或缓存的主要内容,如果未能解决你的问题,请参考以下文章

在特定元素之后附加动态 vue 组件

myBatis组件之缓存实现及使用

如何使用 Vue 类组件在 NuxtJs 项目中注册附加 Hook

如何在使用 Vue.js 触发任何事件时创建新组件?

在 laravel 中,使用我从 ajax 过滤的数据将 VUE 组件“附加”到 DOM 的正确方法是啥?

vuex文档(附加个人理解)