mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-21 13:15:12 +00:00
refactor(nuxt): define layouts as async vue components (#29957)
This commit is contained in:
parent
67456810be
commit
02b57d49db
@ -16,7 +16,6 @@ import layouts from '#build/layouts'
|
||||
// @ts-expect-error virtual file
|
||||
import { appLayoutTransition as defaultLayoutTransition } from '#build/nuxt.config.mjs'
|
||||
|
||||
// TODO: revert back to defineAsyncComponent when https://github.com/vuejs/core/issues/6638 is resolved
|
||||
const LayoutLoader = defineComponent({
|
||||
name: 'LayoutLoader',
|
||||
inheritAttrs: false,
|
||||
@ -24,13 +23,10 @@ const LayoutLoader = defineComponent({
|
||||
name: String,
|
||||
layoutProps: Object,
|
||||
},
|
||||
async setup (props, context) {
|
||||
setup (props, context) {
|
||||
// This is a deliberate hack - this component must always be called with an explicit key to ensure
|
||||
// that setup reruns when the name changes.
|
||||
|
||||
const LayoutComponent = await layouts[props.name]().then((r: any) => r.default || r)
|
||||
|
||||
return () => h(LayoutComponent, props.layoutProps, context.slots)
|
||||
return () => h(layouts[props.name], props.layoutProps, context.slots)
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -285,9 +285,10 @@ export const layoutTemplate: NuxtTemplate = {
|
||||
filename: 'layouts.mjs',
|
||||
getContents ({ app }) {
|
||||
const layoutsObject = genObjectFromRawEntries(Object.values(app.layouts).map(({ name, file }) => {
|
||||
return [name, genDynamicImport(file)]
|
||||
return [name, `defineAsyncComponent(${genDynamicImport(file)})`]
|
||||
}))
|
||||
return [
|
||||
`import { defineAsyncComponent } from 'vue'`,
|
||||
`export default ${layoutsObject}`,
|
||||
].join('\n')
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user