Nuxt快速学习开发---Nuxt3视图Views

11 篇文章 1 订阅
3 篇文章 0 订阅

Views

Nuxt提供了几个组件层来实现应用程序的用户界面 默认情况下,Nuxt 会将app.vue文件视为入口点并为应用程序的每个路由呈现其内容

image.png

应用程序.vue

<template> <div> <h1>Welcome to the homepage</h1> </div> </template>

Page

在nuxt中,页面代表每个特定路由模式的视图。目录中的每个文件pages/代表显示其内容的不同路径。 使用页面,创建pages/index.vue文件并将<NuxtPage />组件添加到app.vue(或删除app.vue默认条目)。

image.png

 
``pages/index.vue <template> <section> <p>这个页面将显示在根路径上,这是page/index页面</p> </section> </template> ``
 

``pages/about.vue <template> <section> <p>这个页面是page/about页面</p> </section> </template> ``

下面我们将通过app.vue来控制进行跳转页面,其中关于, 见下例示代码注释,后续学习nuxt路由将进行更详细介绍。

 

//app.vue
<template>
  <div>
    <!-- 跳转到某个页面 -->
    <div class="page mt-24">
    <!--通过传递 `to` 来指定链接 --> <!--`<NuxtLink>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签。相当于vue中<router-link to="/">-->
      <NuxtLink to="/">index page</NuxtLink>
      <NuxtLink to="/about">about page</NuxtLink>
    </div>

      <div class="current-page">
        <div>
          当前页面:{{ route.name }}
        </div>
        <div>
        <!-- 路由出口 --> <!-- 路由匹配到的组件将渲染在这里,相当于vue中的<router-view></router-view> -->
          <NuxtPage />
        </div>
      </div>
    <!-- 当前路由视图,默认pages下index.vue -->
  </div>
 </template>
 <script setup lang="ts">
    const route = useRoute()
 </script>

此时运行代码,我们将可以切换路由展示视图。

Components

大多数组件都是用户界面的可重用部分,例如按钮和菜单。在 Nuxt 中,您可以在目录中创建这些组件components/,它们将在您的应用程序中自动可用,而无需显式导入它们。

``components/title.vue
<template>
  <div>
    <h1>我是components/title 页面</h1>
  </div>
</template>
``

此时修改app.vue任意位置添加上< Title />运行,我们将看到components/title.vue将在页面中展示

Layouts

布局是页面的包装器,包含多个页面的通用用户界面,例如页眉和页脚显示。<slot />布局是使用组件显示页面内容的Vue 文件。layouts/default.vue默认情况下将使用该文件。自定义布局可以设置为页面元数据的一部分。我们通过写一个简单的layout布局能很好的理解这一部分内容:

 
-| layouts/
---| default.vue
---| custom.vue
---| layout.vue
 
``layouts/layout.vue layout布局
<template>
    <div>
        <!-- <Button></Button> -->
        默认layout布局
        <div>
            <LayoutHeader />
            <slot /><!-- 布局文件中,布局的内容会加载到 中`<slot />`,而不是使用特殊的组件 -->
            <LayoutFooter />
        </div>
    </div>
</template>
``
 
``components/layoutFooter.vue 页面底部
<template>
    <div class="footer">
         -------------------------------------- footer -------------------------------------- 
    </div>
</template>
``
 
``components/layoutHeader.vue  页面头部
<template>
    <div class="footer">
         -------------------------------------- footer -------------------------------------- 
    </div>
</template>
``

启用默认布局

接下来通过修改app.vue来使用default布局,同样nuxt支持修改页面布局方式

 
``app.vue
<template>
  <div>
    <!-- 跳转到某个页面 -->
    <div class="page mt-24">
    <!--通过传递 `to` 来指定链接 --> <!--`<NuxtLink>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签。相当于vue中<router-link to="/">-->
      <NuxtLink to="/">index page</NuxtLink>
      <NuxtLink to="/about">about page</NuxtLink>
    </div>
    <Title></Title> <!--使用components/title.vue组件-->
    <!--默认布局,通过:name=“”可以修改布局方式 -->
    <NuxtLayout>
      <div class="current-page">
        <div>
          当前页面:{{ route.name }}
        </div>
        <div>
          <NuxtPage /><!-- 当前路由视图,默认pages下index.vue -->
        </div>
      </div>
    </NuxtLayout> 
  </div>
 </template>
 <script setup lang="ts">
    const route = useRoute()
 </script>
  ``

设置另一个布局

可以像这样直接覆盖默认布局:

 
··app.vue
<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>
<script setup>
const layout = "custom";
</script>

或者,您可以像这样覆盖每页的默认布局:

 
``layouts/custom.vue
<template>
  <div>
    Some *custom* layout
    <slot />
  </div>
</template>
 
``layouts/layout.vue
<template>
  <div>
    Some *layout* layout
    <slot />
  </div>
</template>

动态改变布局可以为布局使用 ref 或计算属性。

 
<template>
  <div>
    <button @click="enableCustomLayout">Update layout</button>
  </div>
</template>
<script setup>
function enableCustomLayout () {
  setPageLayout('custom')
}
definePageMeta({
  layout: false,
});
</script>

在每页基础上覆盖布局

如果您正在使用~/pages集成,则可以通过设置layout: false然后使用<NuxtLayout>页面内的组件来完全控制。页面/index.vue布局/custom.vue

 
``layouts/custom.vue
<template>
  <div>
    <header>
      <slot name="header">
        Default header content
      </slot>
    </header>
    <main>
      <slot />
    </main>
  </div>
</template>

Nuxt自定义配置使用的目录结构

除非需要,否则最好坚持使用默认值,nuxt会自动根据设置的命名生成目录结构

 
``nuxt.config.ts
export default defineNuxtConfig({
 dir: {
    //自定义Nuxt使用的目录结构,除非需要,否则最好坚持使用默认值。
    assets: "assets", //静态资源目录 默认: "assets"
    layouts: "layouts", //布局目录,其中的每个文件都会自动注册为 Nuxt 布局。 默认: "layouts"
    middleware: "middleware", //中间件目录,其中的每个文件都会自动注册为Nuxt中间件。默认: "middleware"
    pages: "pages", //将被处理以自动生成应用程序页面路由的目录。 默认: "pages"
    plugins: "plugins", // plugins 目录,其中的每个文件都会自动注册为 Nuxt 插件。默认: "plugins"
    public: "public", //dist包含静态文件的目录,可通过 Nuxt 服务器直接访问这些文件,并在生成应用程序时将其复制到文件夹中。 默认: "public"
    static: "static", //默认: "public"
  },
})

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值