Nano Hash - криптовалюты, майнинг, программирование

Кнопка стиля раскрывающегося списка переключается в зависимости от RouterLinkActive навигационной ссылки

Моя панель навигации содержит 3 элемента: 2 раза <li> с элементом <a> и одну раскрывающуюся группу btn. Я хочу выделить кнопку переключения раскрывающегося списка, когда был выполнен один из вариантов раскрывающегося списка навигационной ссылки. Вот мой код:

<ul class="navbar-nav mx-auto h-100 navigation-items">
  <li class="nav-item active">
    <a
      [routerLink]="['/app', 'tab1']"
      routerLinkActive="active-link"
      class="nav-link h-100"
      >Tab1</a
    >
  </li>

  <div class="btn-group dropdown" dropdown>
    <button
      class="btn btn-link nav-link h-100 dropdown-toggle"
      id="button-basic"
      dropdownToggle
      type="button"
-->      routerLinkActive="active-link"   <--- Doesn't work
    >
      Dropdown
      <fa-icon [icon]="faChevronDown" size="xs"></fa-icon>
    </button>
    <ul
      id="dropdown-basic"
      *dropdownMenu
      class="dropdown-menu main-nav"
      role="menu"
      aria-labelledby="button-basic"
    >
      <li role="menuitem">
        <a
          class="dropdown-item"
          [routerLink]="['/app', 'tab2', 'link1']"
          routerLinkActive="active-link"
          >Link1
        </a>
      </li>
      <li role="menuitem">
        <a
          class="dropdown-item"
          data-letter=""
          [routerLink]="['/app', 'tab2', 'link2']"
          routerLinkActive="active-link"
          >Link2
        </a>
     </li>
      <li role="menuitem">
        <a
          class="dropdown-item"
          [routerLink]="['/app', 'tab2', 'link3']"
          routerLinkActive="active-link"
          >Link3
        </a>
      </li>
    </ul>
  </div>

  <li class="nav-item active" fxLayoutAlign="center center">
    <a
      [routerLink]="['/app', 'tab3']"
      title="Inplannen"
      routerLinkActive="active-link"
      class="nav-link h-100"
      >Tab3</a
    >
  </li>
</ul>

Я хотел бы изменить стиль кнопки в зависимости от того, активна ли одна из ссылок routerLinks в раскрывающемся меню. Однако, поскольку сама кнопка не содержит никакой информации о маршрутизации, а в меню нет собственной родительской страницы, решения, которые я нашел в Интернете, еще не работали для меня.

  • Как видите, простое добавление routerLinkActive = "active-link" к элементу кнопки не работает.
  • Добавление routerLinkActive="active-link" [routerLinkActiveOptions]="{exact: true}" в родительскую группу btn работает, но не помогает мне динамически стилизовать саму кнопку. (источник: https://angular.io/api/router/RouterLinkActive)
  • В настоящее время стиль RouterLinkActive отлично работает с элементами <li> nav-item и выпадающими списками. Я хочу добавить его только к элементу <button>.

Кто-нибудь знает обходной путь? Или мне следует согласиться с тем, что невозможно напрямую стилизовать кнопку с помощью RouterLinkActive?

Если вам нужны дополнительные разъяснения или мой файл .scss, прокомментируйте ..


Ответы:


1

Добрый день!

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

Посмотрите на этот довольно простой пример, чтобы понять идею:

<li class="menu-item" [class.menu-item--active]="dashboardLinkRef.isActive">
  <a routerLink="/dashboard" routerLinkActive #dashboardLinkRef="routerLinkActive">
    Dashboard
  </a>
</li>

<!-- Can be multiple refs to router links, that's not a problem ;) -->
<li class="menu-item" [class.menu-item--active]="loginLinkRef.isActive">
  <a routerLink="/login" routerLinkActive #loginLinkRef="routerLinkActive">
    Login
  </a>
</li>
31.03.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..