踩坑记4 keep-alive、emit 仅保存标签页打开的组件

2021.7.14

路由、标签页、keep-alive、emit

坑13(vue3,keep-alive,emit,标签页,Component,缓存,子组件到父组件的信息传递):目标是缓存标签页中目前打开的Component,在标签页中关闭后不再缓存。方法是使用keep-alive组件+emit函数。

布局组件Layout(父组件)中,放置含标签页的Header组件、路由视图router-view组件及keep-alive组件,设置接受并处理emit信息的函数:

<Header @tabsChanged="getTabsChanged" />

...

<router-view v-slot="{ Component }">

    <keep-alive :include="keepList">

        <component :is="Component" />

    </keep-alive>

</router-view>

...

//setup()中

const state=reactive({

    keepList:['Index']

})

const getTabsChanged=(tabList)=>{

    //将标签页中的路由name转换为组件名

    const tabListComponents=tabList.map(tab=>

        tab.name.split('-')

        .map(n=>{

            n=n[0].toUpperCase()+n.slice(1)

            return n

        })

        .join(''))

    state.keepList=tabListComponents

}

return {

    getTabsChanged,

    ...toRefs(state)

}

头组件Header(子组件中),在路由变化时,发送emit信息:

emits:['tabsChanged'],

setup(props,context) {

...

    router.afterEach((to,from) => {

        ...

        //发送标签页信息到Layout组件,改变keep-alive的缓存列表

        context.emit('tabsChanged',tabList.value)

    }

...

}

by 莫得感情踩坑机(限定)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值