4.4-《手把手教您使用Nuxt3框架(Nuxt3中文开发教程)》页面布局(layouts)

本文介绍了Nuxt3框架中的页面布局功能,包括默认全局布局和自定义布局的使用方法。默认布局文件为default.vue,位于layouts目录下,并通过<NuxtLayout>组件应用。自定义布局则可以通过<NuxtLayout name="布局名称">指定,并在特定页面动态修改布局。此外,Nuxt提供setPageLayout函数用于在组件、插件和路由中间件中动态更改页面布局。
部署运行你感兴趣的模型镜像

《手把手教您使用Nuxt3框架(Nuxt3中文开发教程)》全文电子档将分章节陆续在“nuxt”微信订阅号原创发布,敬请关注。如果您等不及,急切提前阅读和实操,可以在订阅号中有偿获取完整电子教程和后续持续更新版本。

本教程配套示例在线预览网址:https://www.dvtop.cn

Nuxt3提供可定制的布局框架,可以在整个应用程序中使用,非常适合将通用UI或代码模式提取到可重用的布局组件中。

页面布局Vue文件必须放在项目根目录的layouts目录下,使用时自动异步导入加载。

4.4.1 默认全局布局

默认布局文件必须为~/layouts/default.vue,通过在~/app.vue中增加<NuxtLayout>组件包含到NuxtPage配置,将整个项目页面使用默认布局。

~/layouts/default.vue

<template>

  <div class="app-box">

    <div>此区域使用默认布局。</div>

    <slot />

  </div>

</template>

增加<NuxtLayout>标签对

~/app.vue

<template>

  <NuxtLayout>

    <div class="app-box">

      <NuxtPage />

    </div>

  </NuxtLayout>

</template>

以上通过网址http://localhost:3000可正常浏览网页,默认布局已经生效。

注意:layouts下不要创建子目录,所有Vue布局文件都放在layouts根目录下。

4.4.2 自定义布局

在页面中通过<NuxtLayout name="布局名称(kebab-case)">可以指定布局,同时支持动态修改当前页面布局,支持页面禁用默认布局而使用自定义布局。当前页面的布局修改后对其他页面无效。

~/layouts/CustomFirst.vue

<template>

  <div class="app-box">

    <div>此区域使用第一个自定义布局。</div>

    <slot />

  </div>

</template>

~/pages/layout/custom.vue

<template>

  <div>

    <div>

      <span>本页面禁用全局默认布局,在此页面内可选择布局:</span>

      <span @click="tap(1)" class="app-margin-left app-cursor">默认布局</span>

      <span @click="tap(2)" class="app-margin-left app-cursor">自定义布局</span>

    </div>

    <NuxtLayout :name="layoutName">

      <div class="app-box">

        <h6>页面内自定义布局和动态更改布局。</h6>

        <BaseFooLink></BaseFooLink>

      </div>

    </NuxtLayout>

  </div>

</template>

<script setup>

  definePageMeta({

    layout: false, //页面初始化时禁用默认布局

    //layout: "custom-first", //页面初始化时自定义更改布局

  });

  //本示例通过标签的name来动态更改布局

  const layoutName = ref("custom-first");

  function tap(type) {

    if (type == 1) layoutName.value = 'default';

    else layoutName.value = "custom-first";

  }

</script>

以上通过网址http://localhost:3000/layout/custom可正常浏览网页。

Nuxt提供setPageLayout函数允许动态更改页面的布局。他依赖于对Nuxt上下文context的访问,只能在组件的设置函数、插件和路由中间件中调用。

~/middleware/layout.global.js

export default defineNuxtRouteMiddleware((to, from) => {

  //全局中间件,指定此路由页面的布局

  if( to.fullPath.indexOf("/component/dynamic")==0){

    setPageLayout('custom-first');

  }

})

注意:布局文件名如果有大写,在使用时需要按kebab-case (短横线隔开式) 命名,CustomFirst.vue在使用时命名为custom-first。

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DVTOP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值