Remove Persistent "Default" Layout for specific page #2432
-
Hey 👋 I have an app with 2 layouts, one authenticated, one unauthenticated. I added it as a Persistent Layout like so, and made it the default layout: resolve: async (name) => {
const page = await resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob<DefineComponent>('./Pages/**/*.vue'));
page.default.layout = page.default.layout || DefaultLayout
return page;
}, So now I don't have to import and specify it every time like so in every page: import DefaultLayout from '@/layouts/DefaultLayout.vue';
defineOptions({
layout: DefaultLayout,
}); This work great, but now on my unautheticated page, I release that I need a layout with multiple slots ! In my page, I added this: defineOptions({
layout: null,
}); And changed my app.ts to this: resolve: async (name) => {
const page = await resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob<DefineComponent>('./Pages/**/*.vue'));
if(page.default.layout !== null) {
page.default.layout = page.default.layout || DefaultLayout
}
return page;
}, So if I do not have a |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
Try this: defineOptions({ layout: false }); createInertiaApp({
resolve: async (name: string): Promise<DefineComponent> => {
const importPage = pages[`./Pages/${name}.vue`];
// Forgetful dev error handling
if (!importPage) {
if (import.meta.env.DEV) return PageComponentMissing as DefineComponent;
throw new Error(
`Unknown page ${name}. Is it located under Pages with a .vue extension?`,
);
}
const page = await importPage();
page.layout ??= BaseLayout;
page.layout ||= null;
return page;
},
}); Technically, you could omit Enjoy the bonus tip with |
Beta Was this translation helpful? Give feedback.
Try this:
Technically, you could omit
page.layout ||= null;
as the adapter does check for falsey values rather than null or undefined.Enjoy the bonu…