Активация ссылки, когда пользователь находится во вложенном маршрутизаторе

Я пытаюсь дать конкретной ссылке «Событие» активный класс при посещении вложенной ссылки просмотра. Например /event/TER63D/tickets, но, похоже, это не работает со стандартным маршрутизатором vue. Я нашел несколько решений, но они, похоже, для более старых версий или просто не работают.

Шаблон навигации приложения

<template>
  <nav>
    <router-link to = "/">Home</router-link> |
    <router-link to = "/about">About</router-link> |
    <router-link to = "/event">Event</router-link> (I want this to have the class "active" when visiting /event/TER63D/tickets) 
  </nav>
  <router-view />
</template>

Маршрутизатор

const routes = [
  {
    path: "/",
    name: "home",
    component: HomeView,
  },
  {
    path: "/event/:id",
    name: "eventlist",
    component: EventView,
    children: [
      {
        path: "tickets",
        component: TicketsView,
      },
      {
        path: "shop",
        component: ShopView,
      },
    ],
    props: true,
  },
  {
    path: "/404",
    name: "404",
    component: () => import("../views/NotFoundView.vue"),
  },
  {
    path: "/:catchAll(.*)", // Unrecognized path automatically matches 404
    redirect: "/404",
  },
];

UPDATE

Я заставляю его работать так, как хочу, но я не знаю, правильно ли это. Я очень новичок в VueJs.

Это обновленный код.

Шаблон навигации приложения

<template>
  <nav>
    <router-link to = "/">Home</router-link> |
    <router-link to = "/about">About</router-link> |
    <router-link :class = "currentlyActive[0] === 'event' ? 'router-link-exact-active' : ''" to = "/event">Event</router-link> (I want this to have the class "active" when visiting /event/TER63D/tickets) 
  </nav>
  <router-view />
</template>

<script>
export default {
  name: "AppView",
  data() {
    return {
      currentlyActive: "",
    };
  },
  watch: {
    $route(to) {
      this.currentlyActive = to.name.split(".");
    },
  },
};
</script>

Маршрутизатор

const routes = [
  {
    path: "/",
    name: "home",
    component: HomeView,
  },
  {
    path: "/event/:id",
    name: "event",
    component: EventView,
    children: [
      {
        path: "tickets",
        component: TicketsView,
        name: "event.tickets",
      },
      {
        path: "shop",
        component: ShopView,
        name: "event.shop",
      },
    ],
    props: true,
  },
  {
    path: "/404",
    name: "404",
    component: () => import("../views/NotFoundView.vue"),
  },
  {
    path: "/:catchAll(.*)", // Unrecognized path automatically matches 404
    redirect: "/404",
  },
];

Разве вы не можете дать каждому маршруту имя, и при посещении этого маршрута сравнить текущее имя маршрута с желаемым маршрутом и, если это правда, назначить нужный класс? Подождите, вы также можете сравнить пути.

Neha Soni 26.12.2022 08:23

@NehaSoni Я обновил код/тему, но не знаю, правильно ли это. Но это работает. Вы можете увидеть код в моем вопросе.

Ben Jerry 26.12.2022 13:16

На мой взгляд, это не плохой способ. Тем не менее, я найду, рекомендуется ли для этого какой-либо другой способ.

Neha Soni 26.12.2022 13:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас нет пути события и страницы в этой структуре.

вы можете добавить маршрут события, например, дно.

Маршрутизатор

const routes = [
  {
    path: "/",
    name: "home",
    component: HomeView,
  },
   {
      path: '/event',
      redirect: "/404", // or component: EventList,
      children: [
        {
          path: ":id",
          name: "eventlist",
          component: EventView,
          children: [
            {
              path: "tickets",
              component: TicketsView,
            },
            {
              path: "shop",
              component: ShopView,
            },
          ],
          props: true,
        },
      ]
    },
  {
    path: "/404",
    name: "404",
    component: () => import("../views/NotFoundView.vue"),
  },
  {
    path: "/:catchAll(.*)", // Unrecognized path automatically matches 404
    redirect: "/404",
  },
];

Шаблон навигации приложения

<template>
  <nav>
    <router-link to = "/">Home</router-link> |
    <router-link to = "/about">About</router-link> |
    <router-link to = "/event">Event</router-link> (I want this to have the class "active" when visiting /event/TER63D/tickets) 
  </nav>
  <router-view />
</template>

Другие вопросы по теме