#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'
})
Когда я посещаю вакцинацию/наружную, все мои навигационные ссылки на боковой панели добавляются с помощью вакцинации
Прикрепление изображений для большей четкости
- Здесь URL-адрес хорош и должен оставаться таким только
- Когда я перехожу к вакцинации/внешней
- Проблема: теперь все связи между вакцинацией
У меня есть очень базовые знания о МАРШРУТИЗАТОРЕ 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. Построение путей с использованием вычисленных работало. Спасибо за помощь!