如何将带有查询参数的路由器添加到路由器列表?

How to add router with query param to router list?

我想添加带有查询参数的路由。
如果 url 是 blog,则导航到索引页。
如果 url 包含 author 查询参数,则将页面上的组件替换为 BlogAuthorPage 组件。

router: {
  extendsRoutes(routes, resolve) {
    routes.push({
      name: 'author-page-detail',
      path: '/blog?author=*',
      component: resolve(__dirname, 'pages/blog/author-page.vue')
    })
  }
}

这不应该在 nuxt.config.js 的路由器密钥中完成,而应该在您的 blog.vue 页面中直接使用 component router guard.
下面的代码应该足以检查路由是否有 author 查询参数并重定向到 blog/author-page 页面。

<script>
export default {
  beforeRouteEnter(to, from, next) {
    next((vm) => {
      if (vm.$route.query?.author) next({ name: 'blog-author-page' })
      else next()
    })
  },
}
</script>

我用"@nuxtjs/router": "^1.6.1",

  • nuxt.config.js
  /*
  ** @nuxtjs/router module config
  */
  routerModule: {
    keepDefaultRouter: true,
    parsePages: true
  }
  • router.js
import Vue from 'vue'
import Router from 'vue-router'

import BlogIndexPage from '~/pages/blog/index'
import BlogAuthorPage from '~/pages/blog/author-page';

Vue.use(Router);

export function createRouter(ssrContext, createDefaultRouter, routerOptions, config) {
  const options = routerOptions ? routerOptions : createDefaultRouter(ssrContext, config).options

  return new Router({
    ...options,
    routes: [
      ...options.routes,
      {
        path: '/blog',
        component: ssrContext.req.url.includes('/blog?author') ? BlogAuthorPage : BlogIndexPage
      }
    ]
  })
}