В приложении Angular для маршрутизации мы используем routerActiveLink
для добавления класса CSS к ссылке или родительскому элементу, когда пользователь переходит по ссылкам.
<li routerLinkActive="active activeClass2">
<a routerLink="/page">Inicio</a>
</li>
Приведенный выше код добавит active
и activeClass2
к элементу li
, когда пользователь перейдет по URL-адресу /page
.
Но иногда мы хотим перейти к разделу на странице, используя старую школу, с помощью сегментов, имеющих id
, прикрепленных к сегменту / div.
Для нашего проекта мы использовали ту же навигацию по страницам, используя эти сегменты (id). Для сегментной навигации по странице в Angular есть directive
, называемый fragment.
, поэтому код будет выглядеть так.
<li routerLinkActive="active">
<a routerLink="/sitio" fragment="inicio">Inicio</a>
</li>
<li routerLinkActive="active">
<a routerLink="/sitio" fragment="invierte">Invierte</a>
</li>
<li routerLinkActive="active">
<a routerLink="/sitio" fragment="contacto">Contacto</a>
</li>
Приведенный выше код работает, но проблема с приведенным выше кодом заключается в том, что routerLinkActive
добавит класс active
ко всем элементам.
Решением вышеупомянутой проблемы, по мнению некоторых пользователей, является добавление [routerLinkActiveOptions]="{ exact: true }"
вместе с `routerLinkActive`, но, похоже, это работает только после версии маршрутизатора 7.2.4
.
Мое решение ActivatedRoute
. Вставьте это в компонент.
class ComponentClass{
activeFragment = this.route.fragment.pipe(share());
constructor(public route: ActivatedRoute){}
}
Теперь используйте это в template
как.
<li [class.active]="(activeFragment | async)==='inicio'">
<a routerLink="/sitio" fragment="inicio">Inicio</a>
</li>
<li [class.active]="(activeFragment | async)==='invierte'">
<a routerLink="/sitio" fragment="invierte">Invierte</a>
</li>
<li [class.active]="(activeFragment | async)==='contacto'">
<a routerLink="/sitio" fragment="contacto">Contacto</a>
</li
Сообщите мне, поможет ли вам этот код или у вас есть лучшее решение.
Спасибо!