您正在浏览 Nuxt 2 文档。前往 Nuxt 3 文档, 或了解更多关于 Nuxt 2 长期支持

router 属性

使用 router 属性自定义 Nuxt 路由器(vue-router )。


base

  • 类型: String
  • 默认值: '/'

应用程序的基础 URL。例如,如果整个单页应用程序都在 /app/ 下,则 base 值应为 '/app/'

当需要在更大的网站中从不同的上下文根提供 Nuxt 时很有用。注意可以设置也可以不设置前端代理 Web 服务器。

如果想重定向到 router.base,可以使用钩子实现,参见_非根路径时重定向到 router.base_

Nuxt v2.15 及以上,在运行时更改此属性的值会覆盖已构建应用程序的配置。

nuxt.config.js
export default {
  router: {
    base: '/app/'
  }
}
设置 base 时,Nuxt 还会在文档头中添加 <base href="{{ router.base }}"/>

此选项直接传递给 vue-router 的 base

routeNameSplitter

  • 类型: String
  • 默认值: '-'

可以通过配置文件中的 routeNameSplitter 选项更改 Nuxt 使用的路由名称分隔符。假设有页面文件 pages/posts/_id.vue,Nuxt 会以编程方式生成路由名称(此例为 posts-id)。将 routeNameSplitter 配置改为 / 后,路由名称会变为 posts/id

nuxt.config.js
export default {
  router: {
    routeNameSplitter: '/'
  }
}

extendRoutes

  • 类型: Function

有时可能想扩展 Nuxt 创建的路由,可以通过 extendRoutes 选项实现。

nuxt.config.js
export default {
  router: {
    extendRoutes(routes, resolve) {
      routes.push({
        name: 'custom',
        path: '*',
        component: resolve(__dirname, 'pages/404.vue')
      })
    }
  }
}

如果想对路由排序,可以使用 @nuxt/utilssortRoutes(routes) 函数:

nuxt.config.js
import { sortRoutes } from '@nuxt/utils'
export default {
  router: {
    extendRoutes(routes, resolve) {
      // 在此添加路由...

      // 然后排序
      sortRoutes(routes)
    }
  }
}

路由的 schema 应遵循 vue-router schema。

添加使用命名视图的路由时,不要忘记添加对应命名 componentschunkNames
nuxt.config.js
export default {
  router: {
    extendRoutes(routes, resolve) {
      routes.push({
        path: '/users/:id',
        components: {
          default: resolve(__dirname, 'pages/users'), // 或 routes[index].component
          modal: resolve(__dirname, 'components/modal.vue')
        },
        chunkNames: {
          modal: 'components/modal'
        }
      })
    }
  }
}

fallback

  • 类型: boolean
  • 默认值: false

控制当浏览器不支持 history.pushState 但模式设置为 history 时,路由器是否应回退到 hash 模式。

设为 false 时,基本上会使所有路由器链接导航在 IE9 中进行完整页面刷新。这在应用程序是服务端渲染且需要在 IE9 中工作时很有用,因为 hash 模式 URL 不适用于 SSR。

此选项直接传递给 vue-router 的 fallback

linkActiveClass

  • 类型: String
  • 默认值: 'nuxt-link-active'

全局设置 <nuxt-link> 的默认 active class。

nuxt.config.js
export default {
  router: {
    linkActiveClass: 'active-link'
  }
}

此选项直接传递给 vue-router 的 linkActiveClass

linkExactActiveClass

  • 类型: String
  • 默认值: 'nuxt-link-exact-active'

全局设置 <nuxt-link> 的默认 active class。

nuxt.config.js
export default {
  router: {
    linkExactActiveClass: 'exact-active-link'
  }
}

此选项直接传递给 vue-router 的 linkExactActiveClass

linkPrefetchedClass

  • 类型: String
  • 默认值: false

全局设置 <nuxt-link> 的 prefetch class(默认禁用此功能)。

nuxt.config.js
export default {
  router: {
    linkPrefetchedClass: 'nuxt-link-prefetched'
  }
}

middleware

  • 类型: StringArray
    • 元素: String

为应用程序的每个页面设置默认中间件。

nuxt.config.js
export default {
  router: {
    // 在每个页面上运行 middleware/user-agent.js
    middleware: 'user-agent'
  }
}
middleware/user-agent.js
export default function (context) {
  // 在 context 中添加 userAgent 属性(可在 `asyncData` 和 `fetch` 方法中使用)
  context.userAgent = process.server
    ? context.req.headers['user-agent']
    : navigator.userAgent
}

要深入了解中间件,请参阅中间件文档

mode

  • 类型: String
  • 默认值: 'history'

配置路由模式,不建议为服务端渲染更改此设置。

nuxt.config.js
export default {
  router: {
    mode: 'hash'
  }
}

此选项直接传递给 vue-router 的 mode

parseQuery / stringifyQuery

  • 类型: Function

提供自定义查询字符串解析/序列化函数,覆盖默认值。

此选项直接传递给 vue-router 的 parseQuery / stringifyQuery

此功能在 Nuxt v2.4.0 中添加

  • 类型: Boolean
  • 默认值: true

配置 <nuxt-link> 在 viewport(浏览器可视区域)中检测到链接时预取_代码分割_页面。需要支持 IntersectionObserver (参见 Caniuse )。

建议有条件地将此功能嵌入到 Polyfill.io 等服务中:

nuxt.config.js
export default {
  head: {
    script: [
      {
        src:
          'https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver',
        body: true
      }
    ]
  }
}

要在特定链接上禁用预取,可以使用 no-prefetch 属性。从 Nuxt v2.10.0 起,也可以使用 prefetch 属性(设为 false):

<nuxt-link to="/about" no-prefetch>About page not prefetched</nuxt-link>
<nuxt-link to="/about" :prefetch="false">About page not prefetched</nuxt-link>

要在所有链接上禁用预取,请将 prefetchLinks 设为 false

nuxt.config.js
export default {
  router: {
    prefetchLinks: false
  }
}

从 Nuxt v2.10.0 起,如果将 prefetchLinks 设为 false 但想预取特定链接,可以使用 prefetch 属性:

<nuxt-link to="/about" prefetch>About page prefetched</nuxt-link>

prefetchPayloads

v2.13.0 添加的功能,仅适用于静态目标

  • 类型: Boolean
  • 默认值: true

使用 target: 'static' 配合 nuxt generate 时,Nuxt 会为每个页面生成 payload.js

启用此选项后,当 <nuxt-link> 出现在 viewport 中时,Nuxt 会自动预取链接页面的 payload,创建即时导航

此选项的启用依赖于 prefetchLinks 选项。

可以通过设置 prefetchPayloadsfalse 来禁用:

nuxt.config.js
export default {
  router: {
    prefetchPayloads: false
  }
}

scrollBehavior

  • 类型: Function

使用 scrollBehavior 选项可以定义页面间滚动位置的自定义行为。每次页面渲染时都会调用此方法。详情请参阅 vue-router 滚动行为文档

从 v2.9.0 起,可以使用文件覆盖路由器的 scrollBehavior,此文件应放在 `~/app/router.scrollBehavior.js`(注意:Windows 上文件名区分大小写)。
router.scrollBehavior.js 文件必须放在项目根目录的 app 文件夹中。

Nuxt 默认的 router.scrollBehavior.js 文件位于:

packages/vue-app/template/router.scrollBehavior.js

强制所有路由滚动到顶部的示例:

app/router.scrollBehavior.js

app/router.scrollBehavior.js
export default function (to, from, savedPosition) {
  return { x: 0, y: 0 }
}

trailingSlash

  • 类型: Booleanundefined
  • 默认值: undefined
  • 最低可用版本: v2.10

设为 true 时,所有路由都会添加尾部斜杠。设为 false 时,尾部斜杠会被删除。

注意:此选项不应在没有准备的情况下设置,需要进行彻底测试。将 router.trailingSlash 设为 undefined 以外的值时,相反的路由将停止工作。因此需要设置 301 重定向,并正确调整_内部链接_。如果将 trailingSlash 设为 true,则只有 example.com/abc/ 有效,example.com/abc 无效。设为 false 时则相反。

行为示例(含子路由)

目录结构:

-| pages/
---| index.vue
---| posts.vue
---| posts/
-----| _slug.vue
-----| index.vue

以下是各 trailingSlash 设置的行为:

default
Route           Page
/               ~/pages/index.vue
/posts          ~/pages/posts.vue (parent) + ~/pages/posts.vue (child route)
/posts/         ~/pages/posts.vue (parent) + ~/pages/posts.vue (child route)
/posts/foo      ~/pages/posts.vue (parent) + ~/pages/_slug.vue (child route)
/posts/foo/     ~/pages/posts.vue (parent) + ~/pages/_slug.vue (child route)
true
Route           Page
/               ~/pages/index.vue
/posts          404
/posts/         ~/pages/posts.vue (parent) + ~/pages/index.vue (child route)
/posts/foo      404
/posts/foo/     ~/pages/posts.vue (parent) + ~/pages/_slug.vue (child route)
false
Route           Page
/               ~/pages/index.vue
/posts          ~/pages/posts.vue
/posts/         ~/pages/posts.vue (parent) + ~/pages/index.vue (child route)
/posts/foo      ~/pages/posts.vue (parent) + ~/pages/_slug.vue (child route)
/posts/foo/     404
Edit this page on GitHub Updated at Tue, Apr 14, 2026