vue3.x keep-alive 写法

补充:其实不依赖 defineOptions 插件设置 name 的方式也可以实现。

App.vue

<template>
    <div id="app" class="container">
        <router-view v-slot="{ Component }">
            <keep-alive>
                <component :is="Component" :key="$route.name" v-if="$route.meta.keepAlive" />
            </keep-alive>
            <component :is="Component" :key="$route.name" v-if="!$route.meta.keepAlive" />
        </router-view>
    </div>
</template>

<script setup lang="ts">

</script>

<style lang="scss" scoped>
#app {
}
</style>

 

router.js

import { closeToast } from 'vant'
import { Router, createRouter, createWebHashHistory } from 'vue-router'

const routes = [
    { name: 'address', path: '/address', component: () => import('@/views/address/index.vue'), meta: { title: '地址', keepAlive: true } }, },
]

const router: Router = createRouter({
    scrollBehavior: () => ({ left: 0, top: 0 }),
    routes,
    history: createWebHashHistory()
})

router.afterEach((to) => {
    closeToast()
})

export default router

 


 

App.vue

<template>
    <div id="app" class="container">
        <router-view v-slot="{ Component }">
            <keep-alive :include="['peopleList', 'addressList']">
                <component :is="Component" />
            </keep-alive>
        </router-view>
    </div>
</template>

 

peopleList.vue

defineOptions({ 
    name: 'peopleList' 
})

 

defineOptions 插件

 

vue3 setup 语法糖配置 name 属性需要使用 defineOptions 插件

pnpm i unplugin-vue-define-options

 

vite.config.js

import DefineOptions from 'unplugin-vue-define-options/vite'

plugins: [
    DefineOptions(),
]

 

tsconfig.json

{
    "compilerOptions": {
        "types": ["unplugin-vue-define-options/macros-global"]
    },
}

 

posted @ 2022-12-09 09:06  贝尔塔猫  阅读(358)  评论(0)    收藏  举报