Перенаправлення при запуску за вказаною 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;

Я хочу, щоб програма передавала компонент Два під час дзвінка .../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? Якщо так, ви спробували - {path: 'two', компонент: Two,} Видалення '/' from '/ two'
urvashi

Так, саме. Я спробував ваш підхід, але потім отримую попередження, що цей маршрут повинен використовувати провідну косу рису. Під час запуску програми цей маршрут тоді не працював ..
hrp8sfH4xQ4

чи можете ви змінити порядок маршруту?
VariableVasasMT

Відповіді:


1

Це нормальна поведінка, це спосіб роботи однієї сторінки. Знак "фунт" - як # - означає, що посилання не переміщуватимуть додаток на іншу сторінку.

тож ви можете змінити режим маршрутизатора на

mode:"hash"

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перегляд, якщо URL-адреса браузера є .../two. Наразі це не так
hrp8sfH4xQ4

0

Чи можете ви надати github repo або щось для перевірки фактичного?

Інакше моя перша ідея - використовувати дитячі маршрути із «порожнім» поданням як основу, ось приклад того, що я спробував. (працює в моєму випадку)

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>

Двоє

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

Ця проблема пов'язана з цим тут stackoverflow.com/questions/58397766/…, і я створив невеликий сховище для цілей тестування github.com/byteCrunsher/router-startup
hrp8sfH4xQ4
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.