vue.js - Vue 3:使用组合 API 正确实现动态布局渲染
问题描述
我正在尝试实现一种生成根据我的路由元设置更改的动态布局组件的好方法(如果路由有meta: { layout: 'LayoutName' }
它应该加载该布局,否则它会加载默认布局MainLayout.vue
)。
经过大量的尝试和错误,我设法让它工作:
// My main App.vue file
<template>
<component :is="layout">
<router-view />
</component>
</template>
<script setup>
import { defineAsyncComponent, computed } from 'vue'
import { useRoute } from 'vue-router';
let layout = computed( () => {
const { meta } = useRoute()
return defineAsyncComponent( () => import(`./layouts/${meta.layout ?? 'MainLayout'}.vue`) )
}
)
我的问题是:这种混合方式是否computed
可取defineAsyncComponent
?
我尝试使用其中任何一个watch
,watchEffect
但都没有获得工作结果。你有什么建议吗?
解决方案
兄弟,由于 webpack 导入无法计算 meta.layout,因此计算对你不起作用??并进行导入。要解决此问题,请为布局创建一个单独的变量。像这样的东西:
layout(): ILayout {
const { meta } = useRoute();
const layoutName: TLayout = meta.layout ?? 'DefaultLayout';
return defineAsyncComponent(
() =>
import(/* webpackChunkName: 'Layout' */ `@/layouts/${layoutName}.vue`)
);
}
PS 别介意语法。我正在使用打字稿。
推荐阅读
- python - 在 pandas 数据框中创建多个空列并将其分配给 0
- c# - 由于某种原因,我的代码似乎忽略了一个循环
- azure - Azure ARM 模板 - 流分析 identity.principalId 作为输出
- oracle - 你什么时候配置rcu?
- javascript - 如何为 vue3 main div #app 提供动态类?
- javascript - 带有超时功能的 JavaScript
- javascript - 在 Vuetify 日历中使用嵌入式属性
- r - 矩阵在 R 中不一致地删除列名
- python - 如何在 Python 中绘制 P( U, V | C = c)?
- r - 将R中的字符变量拆分为多个变量