Redireccionar al inicio por la URL del navegador dada

9

Creé una nueva aplicación Vue con una ruta base. Debido al hecho de que la aplicación está incrustada en otra aplicación Vue, esta aplicación no representa el router-viewinicio. Si desea saber más acerca de cómo o por qué esta aplicación está integrada en otra aplicación, eche un vistazo aquí:

montar aplicaciones Vue en el contenedor de la aplicación Vue principal

y mi propia respuesta a este problema:

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

Al iniciar mi aplicación, muestra todo excepto el router-view. Quiero redirigir al inicio por la URL del navegador dada. Esta es la configuración de mi enrutador :

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;

Quiero que la aplicación represente el componente Dos cuando llame .../my-embedded-app/two. Desafortunadamente, router.replacesiempre redirige a /(por lo que la URL del navegador es .../my-embedded-app/) Depuré el router, y vi que el camino es /, pero esperaría que fuera /two.

Nota importante: no quiero redirigir al usuario a donde /twosea ​​que esté la URL /. Solo quiero representar la vista Twocuando la url es /two. Actualmente no lo hace.

¿Qué puede estar mal? Tal vez ni siquiera necesito esa redirección, y puedo resolver el problema de una manera más elegante.

hrp8sfH4xQ4
fuente
¿Quiere decir que desea representar el componente Uno cuando escribe - / my-embedded-app / one como URL y el componente Two para - / my-embedded-app / two? En caso afirmativo, ¿intentó - {ruta: 'dos', componente: Dos,} Eliminando '/' de '/ dos'
urvashi
Sí exactamente. Intenté su enfoque, pero luego recibí una advertencia de que esta ruta tiene que usar una barra diagonal. Al ejecutar la aplicación, esta ruta no funcionaba entonces ...
hrp8sfH4xQ4
¿Puedes cambiar el orden de tu ruta?
VariableVasasMT

Respuestas:

1

Ese es el comportamiento normal, es la forma en que funciona la aplicación de una sola página. El signo "libra" - como # - significa que los enlaces no moverán la aplicación a otra página.

para que pueda cambiar el modo de enrutador a

mode:"hash"
Muhammad Elbadawy
fuente
0

actualizado: jsfiddle

Lo que terminó sucediendo es que route.currentRoute.fullPathse ejecutó antes de que el enrutador estuviera listo.

VariableVasasMT
fuente
Eso no cambió nada. router.currentRoute.fullPathtodavía regresa en /lugar de /twocuando se llamalocalhost:3000/apps/my-embedded-app/two
hrp8sfH4xQ4
tryrouter.onReady(() => { router.replace(router.currentRoute.fullPath); });
VariableVasasMT
lo siento, eso no funcionó. Cuando uso el evento onReady, incluso recibo este errormessage: "Navigating to current location ("/subApps/app-one") is not allowed"
hrp8sfH4xQ4
@ hrp8sfH4xQ4 te sugiero que hagas un jsfiddle y expliques exactamente lo que necesitas y es posible que las personas puedan cambiarlo por ti, no podemos reproducir exactamente el problema.
VariableVasasMT
lo siento, no puedo reproducir esto con un violín. Se requiere un servidor de archivos para el contenedor IFrame. Pero este es un repositorio para fines de prueba github.com/byteCrunsher/router-startup
hrp8sfH4xQ4
0

Tratar beforeEnter. Echa un vistazo al siguiente código:

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
    }
  ]
});

Lea más sobre los guardias de navegación aquí

Rajeev Radhakrishnan
fuente
lo siento, lo mismo para la respuesta de tony19. No quiero redirigir al usuario. Quiero representar la Twovista si la URL del navegador es .../two. Actualmente no lo hace
hrp8sfH4xQ4
0

¿Podría proporcionar un repositorio github o algo para probar el real?

De lo contrario, mi primera idea es utilizar rutas secundarias con una vista "vacía" como base, aquí un ejemplo de lo que probé. (trabajando en mi caso)

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
          }
        ]
      }
    ]
})

Base.vue

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

One.vue

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

Two.vue

<template>
  <div>Two</div>
</template>
victor-gabou
fuente
Este problema está relacionado con esto aquí stackoverflow.com/questions/58397766/… y creé un pequeño repositorio con fines de prueba github.com/byteCrunsher/router-startup
hrp8sfH4xQ4