지정된 브라우저 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;

호출 할 때 앱이 구성 요소 2 를 렌더링하도록하고 싶습니다 .../my-embedded-app/two. 안타깝게도 router.replace항상 /브라우저 URL 이로 리디렉션됩니다 .../my-embedded-app/. 나는을 디버깅하고 router경로가 있음을 보았지만 그 경로가 /기대됩니다 /two.

중요 사항 :/two URL이 때마다 사용자를 리디렉션하고 싶지 않습니다 /. TwoURL이 인 경우 보기를 렌더링하고 싶습니다 /two. 현재는 그렇지 않습니다.

무엇이 잘못 되었나요? 어쩌면 나는 그 리디렉션이 필요하지 않으며 문제를보다 우아한 방법으로 해결할 수 있습니다.


-/ my-embedded-app / one을 URL로 작성할 때 컴포넌트 1을 렌더링하고 -my-embedded-app / two를위한 컴포넌트 2를 렌더링 하시겠습니까? 그렇다면, 시도해
— 보셨습니까

그렇습니다. 나는 당신의 접근 방식을 시도했지만이 경로가 슬래시를 사용해야한다는 경고를받습니다. 응용 프로그램을 실행하는 경우이 경로는 .. 다음 작동하지 않았다
— hrp8sfH4xQ4

경로 순서를 변경할 수 있습니까?
— VariableVasasMT

답변:


1

이것이 정상적인 동작이며 단일 페이지 응용 프로그램이 작동하는 방식입니다. #와 같은 "파운드"기호는 링크가 응용 프로그램을 다른 페이지로 이동하지 않음을 의미합니다.

라우터 모드를

mode:"hash"

0

업데이트 : jsfiddle

무슨 일이 일어나고 있는지 route.currentRoute.fullPath라우터가 준비되기 전에 실행되었습니다.


그것은 아무것도 바뀌지 않았습니다. router.currentRoute.fullPath아직 반환 /하는 대신 /two호출 할 때localhost:3000/apps/my-embedded-app/two
— hrp8sfH4xQ4

tryrouter.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>

하나. 뷰

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

두. 뷰

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

이 문제는 여기에 관련이 있습니다. stackoverflow.com/questions/58397766/… 테스트 목적으로 작은 저장소를 만들었습니다. github.com/byteCrunsher/router-startup
— hrp8sfH4xQ4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.