Chuyển hướng khi khởi động bằng URL trình duyệt đã cho


9

Tôi đã tạo một ứng dụng Vue mới với đường dẫn cơ sở. Do thực tế ứng dụng được nhúng vào một ứng dụng Vue khác, ứng dụng này không hiển thị khi router-viewkhởi động. Nếu bạn muốn biết thêm về cách thức hoặc lý do ứng dụng này được nhúng vào ứng dụng khác, vui lòng xem tại đây:

gắn ứng dụng Vue vào thùng chứa ứng dụng Vue chính

và câu trả lời của riêng tôi cho vấn đề này:

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

Khi bắt đầu ứng dụng của tôi, nó kết xuất mọi thứ trừ router-view. Tôi muốn chuyển hướng khi khởi động bằng URL trình duyệt đã cho. Đây là cấu hình bộ định tuyến của tôi :

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;

Tôi muốn ứng dụng hiển thị thành phần Hai khi gọi .../my-embedded-app/two. Thật không may, router.replaceluôn luôn chuyển hướng đến /(vì vậy URL của trình duyệt là .../my-embedded-app/). Tôi đã gỡ lỗi routervà thấy rằng đó là con đường /, nhưng tôi sẽ mong đợi nó /two.

Lưu ý quan trọng: Tôi không muốn chuyển hướng người dùng /twobất cứ khi nào có url /. Tôi chỉ muốn hiển thị chế độ xem Twokhi url /two. Hiện tại nó không.

Điều gì có thể sai? Có lẽ tôi thậm chí không cần chuyển hướng đó, và có thể giải quyết vấn đề một cách thanh lịch hơn.


Ý bạn là, bạn muốn kết xuất thành phần Một khi bạn viết - / my-embed-app / one dưới dạng URL và thành phần Two cho - / my-embed-app / hai? Nếu có, bạn đã thử - {path: 'hai', thành phần: Two,} Xóa '/' khỏi '/ hai'
urvashi

Đúng chính xác. Tôi đã thử cách tiếp cận của bạn nhưng sau đó tôi nhận được một cảnh báo rằng tuyến đường này phải sử dụng một dấu gạch chéo hàng đầu. Khi chạy ứng dụng, tuyến đường này không hoạt động sau đó ..
hrp8sfH4xQ4

bạn có thể thay đổi thứ tự của tuyến đường của bạn?
VariableVasasMT

Câu trả lời:


1

Đó là hành vi bình thường, đó là cách ứng dụng một trang hoạt động. Dấu "pound" - như # - có nghĩa là các liên kết sẽ không di chuyển ứng dụng sang trang khác.

để bạn có thể thay đổi chế độ bộ định tuyến thành

mode:"hash"

0

đã cập nhật: jsfiddle

Những gì vết thương xảy ra là route.currentRoute.fullPathđã được thực hiện trước khi bộ định tuyến đã sẵn sàng.


Điều đó đã không thay đổi bất cứ điều gì. router.currentRoute.fullPathvẫn trả về /thay vì /twokhi gọilocalhost:3000/apps/my-embedded-app/two
hrp8sfH4xQ4

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

xin lỗi đã không làm việc Khi tôi sử dụng sự kiện onReady, tôi thậm chí còn gặp phải lỗi nàymessage: "Navigating to current location ("/subApps/app-one") is not allowed"
hrp8sfH4xQ4

@ hrp8sfH4xQ4 tôi khuyên bạn nên tạo một jsfiddle và giải thích chính xác những gì bạn cần và có thể mọi người có thể thay đổi nó cho bạn, chúng tôi không thể tái tạo chính xác vấn đề.
VariableVasasMT

xin lỗi tôi không thể tái tạo điều này với một fiddle. Một máy chủ tệp được yêu cầu cho bộ chứa IFrame. Nhưng đây là kho lưu trữ cho mục đích thử nghiệm github.com/byteCrunsher/router-startup
hrp8sfH4xQ4

0

Hãy thử beforeEnter. Hãy xem đoạn mã dưới đây:

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

Tìm hiểu thêm về bảo vệ điều hướng ở đây


xin lỗi, tương tự cho câu trả lời của tony19. Tôi không muốn chuyển hướng người dùng. Tôi muốn hiển thị Twochế độ xem nếu url trình duyệt là .../two. Hiện tại nó không
hrp8sfH4xQ4

0

Bạn có thể cung cấp một repo github hoặc một số để kiểm tra thực tế?

Mặt khác, ý tưởng đầu tiên của tôi là sử dụng các tuyến đường dành cho trẻ em với chế độ xem "trống" làm cơ sở, đây là một ví dụ về những gì tôi đã thử. (làm việc trong trường hợp của tôi)

bộ định tuyến

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

Cơ sở.vue

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

Một.vue

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

Hai.vue

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

Vấn đề này có liên quan đến vấn đề này ở đây stackoverflow.com/questions/58397766/ và tôi đã tạo một kho lưu trữ nhỏ cho mục đích thử nghiệm github.com/byteCrunsher/router-startup
hrp8sfH4xQ4 17/10/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.