美文网首页js css html
Nuxt3从入门到实战之约定路由

Nuxt3从入门到实战之约定路由

作者: 硅谷干货 | 来源:发表于2023-04-04 23:39 被阅读0次

    前言

    上一讲写了最小nuxt3应用,我们试用了一下多页面写法,关于是否引入vue-router,nuxt3的行为是:如果只有app.vue不创建pages目录,将不会引入vue-router,则打包体积更小,反之则引入路由库,相当智能吧!

    页面路径

    nuxt3会自动整合vue-router,并且映射pages/目录到应用的routes配置中。就像上一讲演示的index.vuedetail.vue,它们在最终生成的路由配置表中大概是下面这样:

    [
      {
        path: '/',
        component: '~/pages/index.vue',
        name: 'index',
      },
      {
        path: '/detail',
        component: '~/pages/detail.vue',
        name: 'detail',
      }
    ]
    

    动态路由

    如果我们在文件名或者文件夹名称里面包含了方括号,它们将被转换为动态路由参数。

    比如下面这样的文件结构:

    -| pages/
    ---| users-[group]/
    -----| [id].vue
    

    上面案例我们可以在组件[id].vue中访问groupid这两个参数:

    <template>
      {{ $route.params.group }}
      {{ $route.params.id }}
    </template>
    

    通过 /users-admins/123 导航即可:

    <NuxtLink to="/users-admins/123">管理员123</NuxtLink>
    

    嵌套路由

    目录和文件同名,就制造了嵌套路由。

    比如下面目录结构:

    -| pages/
    ---| parent/
    ------| child.vue
    ---| parent.vue
    

    child.vue

    <template>
      <div>
        <h1>child page</h1>
      </div>
    </template>
    

    父组件中使用NuxtChild组件显示嵌套子组件内容,parent.vue:

    <template>
      <div>
        <h1>parent page</h1>
        <!-- 子组件出口 -->
        <NuxtChild></NuxtChild>
      </div>
    </template>
    

    试一下,index.vue

    <NuxtLink to="/parent/child">Parent</NuxtLink>
    

    产生的路由会像下面这样:

    {
     path: '/parent',
     children: [
      {
       path: 'child'
      }
     ]
    }
    

    那如果只使用/parent会怎么样?发现内容没有了,显然需要一个{path: '/parent/'}子路由

    image.png

    解决方法也很简单,在parent/目录下加一个index.vue即可。

    原理

    动态路由的原理可以简单在.nuxt目录中一探究竟

    相关文章

      网友评论

        本文标题:Nuxt3从入门到实战之约定路由

        本文链接:https://www.haomeiwen.com/subject/vqceddtx.html