【发布时间】:2021-08-06 18:01:53
【问题描述】:
我正在尝试实现一种生成动态布局组件的好方法,这些组件会根据我的路由元设置而变化(如果路由有 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,但没有获得工作结果。你有什么建议吗?
【问题讨论】:
标签: vue.js vue-router vue-composition-api