Angular2, what is the correct way to disable an anchor element?

前端 未结 10 1213
死守一世寂寞
死守一世寂寞 2020-11-27 17:51

I\'m working on an Angular2 application, and I need to display -- but disable an HTML element. What is the corr

相关标签:
10条回答
  • 2020-11-27 18:08

    For [routerLink] you can use:

    Adding this CSS should do what you want:

    a.disabled {
       pointer-events: none;
       cursor: not-allowed; 
    }
    

    This should fix the issue mentioned by @MichelLiu in the comments:

    <a href="#" [class.disabled]="isDisabled(link)"
        (keydown.enter)="!isDisabled(link)">{{ link.name }}</a>
    

    Another approach

    <a [routerLink]="['Other']" *ngIf="!isDisabled(link)">{{ link.name }}</a>
    <a  *ngIf="isDisabled(link)">{{ link.name }}</a>  
    

    Plunker example

    0 讨论(0)
  • 2020-11-27 18:10

    consider the following solution

    .disable-anchor-tag { 
      pointer-events: none; 
    }
    
    0 讨论(0)
  • 2020-11-27 18:16

    This is for anchor tags that act as tabs:

    [ngStyle]="{'pointer-events': isSaving ? 'none': 'auto'}"
    
    0 讨论(0)
  • 2020-11-27 18:19

    Specifying pointer-events: none in CSS disables mouse input but doesn't disable keyboard input. For example, the user can still tab to the link and "click" it by pressing the Enter key or (in Windows) the ≣ Menu key. You could disable specific keystrokes by intercepting the keydown event, but this would likely confuse users relying on assistive technologies.

    Probably the best way to disable a link is to remove its href attribute, making it a non-link. You can do this dynamically with a conditional href attribute binding:

    <a *ngFor="let link of links"
       [attr.href]="isDisabled(link) ? null : '#'"
       [class.disabled]="isDisabled(link)"
       (click)="!isDisabled(link) && onClick(link)">
       {{ link.name }}
    </a>
    

    Or, as in Günter Zöchbauer's answer, you can create two links, one normal and one disabled, and use *ngIf to show one or the other:

    <ng-template ngFor #link [ngForOf]="links">
        <a *ngIf="!isDisabled(link)" href="#" (click)="onClick(link)">{{ link.name }}</a>
        <a *ngIf="isDisabled(link)" class="disabled">{{ link.name }}</a>
    </ng-template>
    

    Here's some CSS to make the link look disabled:

    a.disabled {
        color: gray;
        cursor: not-allowed;
        text-decoration: underline;
    }
    
    0 讨论(0)
  • 2020-11-27 18:23

    Just use

    <a [ngClass]="{'disabled': your_condition}"> This a tag is disabled</a>
    

    Example:

     <a [ngClass]="{'disabled': name=='junaid'}"> This a tag is disabled</a>
    
    0 讨论(0)
  • 2020-11-27 18:27

    Just came across this question, and wanted to suggest an alternate approach.

    In the markup the OP provided, there is a click event binding. This makes me think that the elements are being used as "buttons". If that is the case, they could be marked up as <button> elements and styled like links, if that is the look you desire. (For example, Bootstrap has a built-in "link" button style, https://v4-alpha.getbootstrap.com/components/buttons/#examples)

    This has several direct and indirect benefits. It allows you to bind to the disabled property, which when set will disable mouse and keyboard events automatically. It lets you style the disabled state based on the disabled attribute, so you don't have to also manipulate the element's class. It is also better for accessibility.

    For a good write-up about when to use buttons and when to use links, see Links are not buttons. Neither are DIVs and SPANs

    0 讨论(0)
提交回复
热议问题