Ссылка на навигационный элемент боковой панели маршрутизатора Vue изменяется при посещении внутренних страниц

#vue.js #vuejs2 #vue-router

Вопрос:

У меня есть приложение SPA в Vue JS, у меня есть боковая панель навигации, которую я хочу видеть на всех страницах. У меня есть следующие ссылки, настроенные на боковой панели навигации

         {
            name: 'Overview',
            icon: 'ti-dashboard',
            path: 'overview',

        },
        {
            name: 'Areas',
            icon: 'ti-map-alt',
            path: 'areas',
        },
        {
            name: 'Assignments',
            icon: 'ti-check-box',
            path: 'assignments',

        },
        {
            name: 'Records',
            icon: 'ti-view-list-alt',
            id: 'third-party',
            children: [
                {
                    name: 'Vaccination',
                    path: 'vaccination',
                },
                {
                    name: 'Out-of-Area Vaccinations',
                    path: 'vaccination/outer',
                },
                {
                    name: 'Surveys',
                    path: 'survey',
                },
                {
                    name: 'Archived',
                    path: 'archived',
                },
            ],
        }
        ...
 

Ниже приведена настройка моего маршрутизатора

 const routes = [
    {
        path: '/',
        component: App,
    },
    {
        path: '/login',
        component: require('../../../assets/js/components/Template/AppLogin.vue'),
    },
    {
        path: '/platform/projects',
        component: require('../../../assets/js/components/Template/Projects.vue'),
        meta: {requiresAuth: true},
    },
    {
        path: '/project/:projectId',
        component: require('../../../assets/js/components/Template/UIComponents/SidebarPlugin/SideBarNew.vue'),
        props: route => ({projectId: route.params.projectId}),
        children: [
            {
                path: 'overview',
                component: require('../../../assets/js/components/Template/mvdProjectOverview.vue'),
            },
            {
                path: 'areas',
                component: require('../../../assets/js/components/Template/AddVaccinationArea.vue'),
            },
            {
                path: 'assignments',
                component: require('../../../assets/js/components/Template/AssignAreaUsers.vue'),
            },
            {
                path: 'vaccination',
                component: require('../../../assets/js/components/Template/VaccinationRecord.vue'),
            },
            {
                path: 'vaccination/outer',
                name: 'projectOuterVaccinations',
                component: require('../../../assets/js/components/Template/OuterVaccinations.vue'),
            },
            {
                path: 'archived',
                name: 'projectOuterVaccinations',
                component: require('../../../assets/js/components/Template/ArchivedRecords.vue'),
            },
            {
                path: 'survey',
                component: require('../../../assets/js/components/Template/Surveys.vue'),
            },
            ...
 
 const router = new VueRouter({
    routes,
    mode: 'history'
})
 

Когда я посещаю вакцинацию/наружную, все мои навигационные ссылки на боковой панели добавляются с помощью вакцинации

Прикрепление изображений для большей четкости

  1. Здесь URL-адрес хорош и должен оставаться таким только

Здесь URL-адрес хорош и должен оставаться таким только

  1. Когда я перехожу к вакцинации/внешней

введите описание изображения здесь

  1. Проблема: теперь все связи между вакцинацией

введите описание изображения здесь

У меня есть очень базовые знания о МАРШРУТИЗАТОРЕ VUE и ССЫЛКЕ МАРШРУТИЗАТОРА. Помощь или руководство было бы здорово. Заранее спасибо.

Ответ №1:

Я почти уверен, что вы используете пути из представленного массива как: <router-link to="LINK">some label</router-link> . Однако, поскольку ваши значения пути не начинаются с / — vue, маршрутизатор добавит значение to свойства к текущему URL-адресу, а не заменит его.

Давайте представим, что я нахожусь по /a/b/c URL.
Когда я нажму на <router-link to="dogs">Dogs</router-link> — я буду перенаправлен на /a/b/c/dogs .
Когда я нажму на <router-link to="/dogs">Dogs</router-link> — я буду перенаправлен на /dogs .

Все, что вам нужно сделать, это начать пути с косой черты. Поэтому вместо path: vaccination/outer используйте path: /vaccination/outer и он будет работать так, как вы хотите.

Комментарии:

1. Привет, спасибо за информацию. Я уже пробовал это, но затем мой URL-адрес становится » 127.0.0.1:8000/вакцинация/внешний » вместо » 127.0.0.1:8000/проект/1068/вакцинация/внешний «.

2. Разве это не базовый URL-адрес? Вы пробовали его установить?: router.vuejs.org/api/#base

3. Нет! Базовый URL-адрес должен быть только 127.0.0.1:8000. Я не установил базовый URL-адрес по умолчанию в конфигурации маршрутизатора. Мне действительно нужен /project/1068/ для всех страниц, связанных с проектом.

4. Поэтому стройте пути, используя вычисленные: /project/${this.$route.params.projectId}/rest/of/your/url

5. Построение путей с использованием вычисленных работало. Спасибо за помощь!