我有一个Vue 2.使用vue和vue处理应用程序的路由.

在某些情况下,我必须直接显示一个children vue.我的模板如下:

| voice 1 | voice 2 | voice 3 |

    | submenu 1 | submenu 2 | submenu 3 |

|
| content 1
|

所以基本上我有一个菜单,当你 Select 一个菜单声音时,会显示相关的子菜单,当你 Select 一个子菜单声音时,会显示相关的内容.

路由系统遵循菜单 struct ,因此,如果你进入/voice1/submenu1,你应该显示content 1,如果你点击子菜单2,那么你进入/voice1/submenu2,显示content 2,以此类推.

当用户登录时,我不想显示一个空页面,但我希望路由已经填充了默认组件(在本例中为voice 1submenu 1content 1),但我不知道如何做到这一点.现在,我解决了在我的路由拦截器中添加这个问题:

router.beforeEach((to, from, next) ⇒ {
  const token = store.getToken();

  const tokenIsValid = validateToken(token);
  const routeDoesntNeedAuth = routeWithoutAuth.indexOf(to.fullPath) > -1;

  if (tokenIsValid || routeDoesntNeedAuth) {
    if (to.fullPath === '/') {
      next('/voice1/submenu1');       // <- this line does the trick
    }

    next();
  } else {
    next('/login');
  }
});

但我相信有更好的方法.我的路由系统如下:

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      component: AppWrapper,
      children: [
        {
          path: '/voice1',
          components: {
            default: PageWrapper,
            subMenu: VoiceFirstSubMenu,
          },
          children: [
            {
              path: 'submenu1',
              components: {
                mainContent: ContentOne,
              },
            },
            {
              path: 'submenu2',
              components: {
                mainContent: ContentTwo,
              },
            },
            {
              path: 'submenu3',
              components: {
                mainContent: ContentThree,
              },
            },
          ],
        },
      ],
    },
    {
      path: '/login',
      component: Login,
    },
  ],
});

我该怎么解决这个问题?

神圣的问题是正确的,问题是我有一行代码将我的所有路由重定向到/:

this.$router.push('/');

在包含整个应用程序的包装器组件中.一旦go 掉那条线,一切都很好.

推荐答案

可以使用route config中的redirect属性重定向任何路由

每当调用/ route时,vuejs将自动重定向到/voice1/submenu1

routes: [
    {
      path: '/',
      redirect: '/voice1/submenu1', <---- / route will be redirected to /voice1/submenu1
      component: AppWrapper,
      children: [
         ...
      ]
    },
]

Vue.js相关问答推荐

如何将$validator实例注入到使用组合API语法的Vue2.7应用程序中

带 Bootstrap 的 Vue js,导航栏菜单不起作用

如何使用 Vite 从公共目录导入 JSON 文件?

VeeValidate 4 字段验证状态

v-slot: activator 中 {attrs} 参数的作用是什么?

使用 Nuxt 动态获取文件夹中的图像路径

带有热重载的 docker 容器上的 Vue.js 应用程序

在重复内容区域中添加

如何在 vue.js 2 的其他组件中调用方法?

VueRouter 未定义

Vuetify 单选按钮未显示为选中状态

Jest错误找不到模块....

无法访问数据对象的嵌套属性

重新加载页面正在 vue 组件中的插槽上闪烁内容

来自 Vue.js 的 ESLint 插件的消息中的LHS是什么意思?

使用 Vue 在单个文件组件中调用渲染方法

vuejs 配置:使用全局变量?

在 Vue.js 模板中调用函数

单击 v-select 项目时如何获取对象而不是单个值?

用于身份验证标头的 vue-resource 拦截器