在启动时通过给定的浏览器URL重定向


9

我用基本路径创建了一个新的Vue应用程序。由于该应用程序已嵌入到另一个Vue应用程序中,因此该应用程序无法呈现router-view在启动时。如果您想进一步了解此应用程序如何或为何嵌入到另一个应用程序中,请在此处查看:

将Vue应用安装到主Vue应用的容器中

我对这个问题的回答:

https://stackoverflow.com/a/58265830/9945420

启动我的应用程序时,它将呈现除以外的所有内容router-view。我想在启动时通过给定的浏览器URL进行重定向。这是我的路由器配置:

import Vue from 'vue';
import Router from 'vue-router';

import One from './views/One.vue';
import Two from './views/Two.vue';

Vue.use(Router);

const router = new Router({
    base: '/my-embedded-app/',
    mode: 'history',
    routes: [
        {
            path: '/',
            component: One,
        },
        {
            path: '/two',
            component: Two,
        },
    ],
});

router.replace(router.currentRoute.fullPath);

export default router;

我希望应用程序在调用时呈现组件Two.../my-embedded-app/two。不幸的是,router.replace总是重定向到/(因此浏览器URL是.../my-embedded-app/)。我调试了router,发现路径为/,但是我希望它是/two

重要说明:/two url为时, 我不想将用户重定向到/。我只想渲染视图Two在url为时/two。目前还没有。

可能是什么问题?也许我什至不需要重定向,并且可以以更优雅的方式解决问题。


您的意思是,您要在编写-/ my-embedded-app / one作为URL时呈现组件一,而在-/ my-embedded-app / two时呈现组件2吗?如果是,您是否尝试过-{路径:“两个”,组件:两个,}从“ /两个”中删除“ /”
urvashi

对,就是这样。我尝试了您的方法,但随后收到一条警告,指出该路线必须使用前导斜线。当运行应用程序这条路并没有那么工作..
hrp8sfH4xQ4

您可以更改路线的顺序吗?
VariableVasasMT

Answers:



0

更新:jsfiddle

最后发生的事情是route.currentRoute.fullPath在路由器准备就绪之前执行的。


那什么都没改变。router.currentRoute.fullPath仍然返回/而不是/two在调用时返回localhost:3000/apps/my-embedded-app/two
hrp8sfH4xQ4

试试router.onReady(() => { router.replace(router.currentRoute.fullPath); });
VariableVasasMT

抱歉,这没有用。当我使用onReady事件时,我什至会收到此错误message: "Navigating to current location ("/subApps/app-one") is not allowed"
hrp8sfH4xQ4

@ hrp8sfH4xQ4我建议您制作一个jsfiddle并确切说明您的需求,也许有人可以为您更改它,但我们无法完全重现该问题。
VariableVasasMT

对不起,我无法用小提琴来复制它。IFrame容器需要文件服务器。但这是一个用于测试目的的存储库github.com/byteCrunsher/router-startup
hrp8sfH4xQ4

0

尝试beforeEnter。看下面的代码:

const router = new Router({
  base: "/my-embedded-app/",
  mode: "history",
  routes: [
    {
      path: "/",
      component: One,
      beforeEnter: (to, from, next) => {
        // Your are free to add whatever logic here.
        // On first visit
        next("/two");
      }
    },
    {
      path: "/two",
      component: Two
    }
  ]
});

在此处阅读有关导航卫士的更多信息


对不起,与tony19的回答相同。我不想重定向用户。Two如果浏览器的网址为,我想渲染视图.../two。目前还没有
hrp8sfH4xQ4

0

您能提供一个github仓库还是一些来测试实际的仓库?

否则,我的第一个想法是使用带有“空”视图的子路由作为基础,这里是有关我尝试过的示例。(就我而言)

router.js

export default new Router({
    mode: 'history',
    base: '/my-embedded-app/',
    routes: [
      {
        path: '/',
        name: 'base',
        component: Base,
        children: [
          {
            path: '',
            name: 'one',
            component: One
          },
          {
            path: 'two',
            name: 'two',
            component: Two
          }
        ]
      }
    ]
})

基本值

<template>
    <router-view/>
</template>

一个

<template>
  <div>One</div>
</template>

二人

<template>
  <div>Two</div>
</template>

这个问题与此有关,这里stackoverflow.com/questions/58397766/…,我创建了一个用于测试目的的小型存储库github.com/byteCrunsher/router-startup
hrp8sfH4xQ4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.