Почему отключенный RouterLink все еще работает?

Проблема

У меня проблема со ссылками, которые активны, хотя их атрибут disabled имеет значение true.

Настраивать

Следуя этому шаблону из официальной документации Angular Material:

<a mat-button href="https://www.google.com/" target="_blank">Link</a>

Я создаю раздел навигации своего приложения следующим образом:

<nav>
    <a mat-button routerLink="/foo" [disabled]="true">Foo</a>
    <a mat-button routerLink="/moo" [disabled]="true">Moo</a>
    <a mat-button href="https://www.google.com/" target="_blank" [disabled]="true">Link</a>
</nav>

<router-outlet></router-outlet>

Как показано на рисунке, ссылки действительно отображаются как неактивные. Однако только href-link действительно отключен. Те, что для навигации в приложении с routerLink, все еще работают, и я могу менять страницы, нажимая на них.

Скриншот примера приложения

Пример

Я подготовил пример проекта на Stackblitz, чтобы продемонстрировать эту проблему.

Как сделать отключенные routerLinks неактивными?


Обновление 1

Ради эксперимента я заменил nav на mat-nav-list, а mat-button на mat-list-item вот так:

<mat-nav-list>
    <a mat-list-item routerLink="/foo" [disabled]="true">Foo</a>
    <a mat-list-item routerLink="/moo" [disabled]="true">Moo</a>
    <a mat-list-item href="https://www.google.com/" target="_blank" [disabled]="true">Link</a>
</mat-nav-list>

Теперь он работает, как и ожидалось, но внешний вид не тот, который я хочу иметь.

Я также могу заменить тег a на button и добавить прослушиватель click, вызывающий Router.navigate, но, как следует из названия, я хотел бы знать, почему отключенный RouterLink все еще работает и как по-настоящему (не только визуально) отключить его.


Обновление 2

Тем временем я сообщил об этом как об ошибке в Angular Material.


person scopchanov    schedule 22.05.2020    source источник
comment
Отвечает ли это на ваш вопрос? Отключено, не работает   -  person GSerg    schedule 23.05.2020
comment
@GSerg, нет, это не так. Для гиперссылок нет отключенного атрибута. Это функция Angular Material, отсюда и соответствующий тег.   -  person scopchanov    schedule 23.05.2020


Ответы (1)


У меня недостаточно представителей, чтобы комментировать, но кажется, что угловой материал предназначен только для дизайна, то есть вы отключаете CSS для тега. Если вы хотите остановить маршрутизатор, я думаю, вам нужно сделать это на стороне машинописного текста, сделать функцию, чтобы проверить, отключена ли кнопка или нет, и соответственно перемещаться или нет.

person Diogo Santos    schedule 22.05.2020
comment
угловой материал предназначен только для дизайна — нет, это не так. Он не просто добавляет или удаляет классы. Это тоже меняет поведение. Я расширил свой пример, чтобы доказать это. С href отключенное состояние работает как положено. С аналогом навигации в приложении, routerLink, это не так. - person scopchanov; 23.05.2020