route navigate link example angular angular2-routing

link - router.navigate angular 6



¿Cómo puedo deshabilitar condicionalmente el atributo routerLink? (4)

En mi aplicación Angular 2, estoy tratando de deshabilitar un routerLink sin ningún éxito. Intenté manejar el evento click en el evento click (con event.preventDefault() y event.stopPropagation() ) pero no funciona.

¿Cómo puedo desactivar un routerLink?


No es necesario deshabilitar ningún evento de puntero:

Modelo:

<a [routerLink]="homeLinkEnabled ? ''/home'' : null" routerLinkActive="is-active">Home</a>

CSS opcional:

.is-active { cursor: default; text-decoration: none; }

Descripción:

Cuando homeLinkEnabled devuelve false , null hará que routerLink vincule a la ruta actual / activa.

Si routerLink vincula a la ruta activa, se aplicará la clase que se especifica en routerLinkActive .

Allí podemos especificar cómo debe aparecer el routerLink deshabilitado.

routerLink a la ruta activa no activará un evento de navegación.


Acabo de tener éxito con un problema similar: tener una matriz de enlaces de navegación en un ngFor, algunos requerían [routerLink], mientras que otros requerían (clic) - mi problema era que todos los enlaces dependían de [routerLink] para [routerLinkActive] , así que tuve que detener routerLink, sin tocar su valor.

`<a [routerLink]="item.link" routerLinkActive="isActive"> <span (click)="item.click ? item.click($event) : void> </a>`

con:

`click: ($event) => { $event.stopPropagation(); // Only seems to $event.preventDefault(); // work with both // Custom onClick logic }`

Como el lapso está dentro, puede estar seguro de que la cancelación del evento se produce antes de que aparezca en [routerLink], mientras que routerLinkActive aún se aplicará.


Desactivar pointer-events en el

<a [routerlink]="xxx" [class.disabled]="disabled ? true : null">Link</a> a.disabled { pointer-events: none; cursor: default; }

Vea también Angular2, ¿cuál es la forma correcta de deshabilitar un elemento de anclaje?

o

<a *ngIf="isEnabled" [routerlink]="xxx">Link</a> <div *ngIf="!isEnabled">not a link</div>

o para reutilizar fácilmente la plantilla de enlace deshabilitada

<ng-template #disabledLink> <div *ngIf="!isEnabled">not a link</div> </ng-template> <a *ngIf="isEnabled; else disabledLink" [routerlink]="xxx">Link</a>


Deshabilitar pointer-events en cualquier etiqueta html:

<div [routerLink]="[''/home'', { foo: bar }]" [ngStyle]="{''pointer-events'': myLinkEnabled ? ''none'' : null}"> Click me </div>

''none'' resuelve deshabilitar pointer-events , es decir, deshabilitar el enlace.

null resuelve ignorar el estilo.