自定义布局组件
components/page-layout/index.vue
- 使用动态组件,传入组件
- 自定义布局组件中的布局配置从
route规则的meta字段中获取 meta字段中的layout字段未定义则默认使用deaultsrc目录下新建layouts目录存放页面布局文件,layouts/default.vue是默认的布局文件
<template>
<component :is="layout"><slot /></component>
</template>
<script setup lang="ts">
import { computedAsync } from "@vueuse/core";
import { useRoute } from "vue-router";
const layout = computedAsync(async () => {
const route = useRoute();
try {
const { layout = "default" } = route.meta;
// vite使用5版本 若是4版本 此次使用相对路径../../layouts/${layout}.vue
const layoutComponent = await import(`@/layouts/${layout}.vue`);
return layoutComponent.default;
} catch (err) {
console.warn(`fail load: @/layouts/${layout}.vue`, err);
// vite使用5版本 若是4版本 此次使用相对路径../../layouts/${layout}.vue
const defaultComponent = await import(`@/layouts/default.vue`);
return defaultComponent.default;
}
});
</script>
使用示例
- 自定义一个404页面不需要使用通用的布局模板,定义404的页面规则为
export const PAGE_NOT_FOUND_ROUTE = {
path: "/:path(.*)*",
name: "PAGE_NOT_FOUND_NAME",
component: () => import("@/views/system/404.vue"),
meta: {
title: "ErrorPage",
layout: "empty", // 使用empty布局
},
};
- 在
layouts目录下新建empty.vue
<template>
<RouterView />
</template>