Angular2,禁用锚元素的正确方法是什么?
Angular2, what is the correct way to disable an anchor element?
我正在开发 Angular2 应用程序,我需要显示 -- 但是 disable
<a>
HTML 元素。正确的做法是什么?
已更新
请注意 *ngFor
,这将阻止使用 *ngIf
的选项而不完全呈现 <a>
。
<a *ngFor="let link of links"
href="#"
[class.disabled]="isDisabled(link)"
(click)="onClick(link)">
{{ link.name }}
</a>
TypeScript 组件有一个如下所示的方法:
onClick(link: LinkObj) {
// Do something relevant with the object...
return false;
}
我实际上需要阻止元素被点击,而不仅仅是看起来它与 CSS。我假设我一开始可能需要绑定到 [disabled]
属性,但这是不正确的,因为锚元素没有 disabled
属性.
我查看并考虑使用 pointer-events: none
,但这使我的 cursor: not-allowed
风格无法发挥作用——这是要求的一部分。
对于 [routerLink]
你可以使用:
添加此 CSS 应该可以满足您的要求:
a.disabled {
pointer-events: none;
cursor: not-allowed;
}
这应该可以解决@MichelLiu 在评论中提到的问题:
<a href="#" [class.disabled]="isDisabled(link)"
(keydown.enter)="!isDisabled(link)">{{ link.name }}</a>
另一种方法
<a [routerLink]="['Other']" *ngIf="!isDisabled(link)">{{ link.name }}</a>
<a *ngIf="isDisabled(link)">{{ link.name }}</a>
在 CSS 中指定 pointer-events: none
会禁用鼠标输入,但不会禁用键盘输入。例如,用户仍然可以通过按 Enter 键或(在 Windows 中)[=26] 跳转到 link 和 "click" =]≣ 菜单键。您可以通过拦截 keydown
事件来禁用特定的击键,但这可能会使依赖辅助技术的用户感到困惑。
可能禁用 link 的最佳方法是删除其 href
属性,使其成为非 link。您可以使用条件 href
属性绑定动态执行此操作:
<a *ngFor="let link of links"
[attr.href]="isDisabled(link) ? null : '#'"
[class.disabled]="isDisabled(link)"
(click)="!isDisabled(link) && onClick(link)">
{{ link.name }}
</a>
或者,如 Günter Zöchbauer 的回答,您可以创建两个 link,一个正常,一个禁用,然后使用 *ngIf
显示其中之一:
<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>
这里有一些 CSS 可以让 link 看起来像残疾人:
a.disabled {
color: gray;
cursor: not-allowed;
text-decoration: underline;
}
刚遇到这个问题,想提出一个替代方法。
在 OP 提供的标记中,有一个点击事件绑定。这让我觉得这些元素被用作 "buttons"。如果是这种情况,它们可以被标记为 <button>
元素,并像链接一样设置样式,如果这是您想要的外观。 (比如Bootstrap内置了"link"按钮样式,https://v4-alpha.getbootstrap.com/components/buttons/#examples)
这有几个直接和间接的好处。它允许您绑定到 disabled
属性,设置后将自动禁用鼠标和键盘事件。它允许您根据 disabled 属性设置禁用状态的样式,因此您不必也操作元素的 class。它的可访问性也更好。
有关何时使用按钮和何时使用链接的详细说明,请参阅 Links are not buttons. Neither are DIVs and SPANs
你可以试试这个
<a [attr.disabled]="someCondition ? true: null"></a>
.disabled{ pointer-events: none }
将禁用点击事件,但不会禁用标签事件。要禁用选项卡事件,如果禁用标志为真,则可以将 tabindex 设置为 -1。
<li [routerLinkActive]="['active']" [class.disabled]="isDisabled">
<a [routerLink]="['link']" tabindex="{{isDisabled?-1:0}}" > Menu Item</a>
</li>
我的回答可能会迟到 post。它只能通过锚标记内的内联 css 来实现。
<a [routerLink]="['/user']" [style.pointer-events]="isDisabled ?'none':'auto'">click-label</a>
考虑到 isDisabled
是组件中的 属性,可以是 true
或 false
。
我用过
tabindex="{{isEditedParaOrder?-1:0}}"
[style.pointer-events]="isEditedParaOrder ?'none':'auto'"
在我的锚标签中,这样他们就不能通过使用 Tab 来使用 "enter" 键和指针本身来移动到锚标签,我们根据 属性 设置为 'none' ' isEditedParaO
命令'whi
只需使用
<a [ngClass]="{'disabled': your_condition}"> This a tag is disabled</a>
示例:
<a [ngClass]="{'disabled': name=='junaid'}"> This a tag is disabled</a>
考虑以下解决方案
.disable-anchor-tag {
pointer-events: none;
}
这是作为标签的锚标签:
[ngStyle]="{'pointer-events': isSaving ? 'none': 'auto'}"
而不是class.disabled,我们也可以绑定一个带有disabled属性的变量。这将仅用于按钮、输入和下拉菜单。 HTML disabled Attribute
例如:
<button [disabled]="isDisabled">Test</button>
我正在开发 Angular2 应用程序,我需要显示 -- 但是 disable
<a>
HTML 元素。正确的做法是什么?
已更新
请注意 *ngFor
,这将阻止使用 *ngIf
的选项而不完全呈现 <a>
。
<a *ngFor="let link of links"
href="#"
[class.disabled]="isDisabled(link)"
(click)="onClick(link)">
{{ link.name }}
</a>
TypeScript 组件有一个如下所示的方法:
onClick(link: LinkObj) {
// Do something relevant with the object...
return false;
}
我实际上需要阻止元素被点击,而不仅仅是看起来它与 CSS。我假设我一开始可能需要绑定到 [disabled]
属性,但这是不正确的,因为锚元素没有 disabled
属性.
我查看并考虑使用 pointer-events: none
,但这使我的 cursor: not-allowed
风格无法发挥作用——这是要求的一部分。
对于 [routerLink]
你可以使用:
添加此 CSS 应该可以满足您的要求:
a.disabled {
pointer-events: none;
cursor: not-allowed;
}
这应该可以解决@MichelLiu 在评论中提到的问题:
<a href="#" [class.disabled]="isDisabled(link)"
(keydown.enter)="!isDisabled(link)">{{ link.name }}</a>
另一种方法
<a [routerLink]="['Other']" *ngIf="!isDisabled(link)">{{ link.name }}</a>
<a *ngIf="isDisabled(link)">{{ link.name }}</a>
在 CSS 中指定 pointer-events: none
会禁用鼠标输入,但不会禁用键盘输入。例如,用户仍然可以通过按 Enter 键或(在 Windows 中)[=26] 跳转到 link 和 "click" =]≣ 菜单键。您可以通过拦截 keydown
事件来禁用特定的击键,但这可能会使依赖辅助技术的用户感到困惑。
可能禁用 link 的最佳方法是删除其 href
属性,使其成为非 link。您可以使用条件 href
属性绑定动态执行此操作:
<a *ngFor="let link of links"
[attr.href]="isDisabled(link) ? null : '#'"
[class.disabled]="isDisabled(link)"
(click)="!isDisabled(link) && onClick(link)">
{{ link.name }}
</a>
或者,如 Günter Zöchbauer 的回答,您可以创建两个 link,一个正常,一个禁用,然后使用 *ngIf
显示其中之一:
<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>
这里有一些 CSS 可以让 link 看起来像残疾人:
a.disabled {
color: gray;
cursor: not-allowed;
text-decoration: underline;
}
刚遇到这个问题,想提出一个替代方法。
在 OP 提供的标记中,有一个点击事件绑定。这让我觉得这些元素被用作 "buttons"。如果是这种情况,它们可以被标记为 <button>
元素,并像链接一样设置样式,如果这是您想要的外观。 (比如Bootstrap内置了"link"按钮样式,https://v4-alpha.getbootstrap.com/components/buttons/#examples)
这有几个直接和间接的好处。它允许您绑定到 disabled
属性,设置后将自动禁用鼠标和键盘事件。它允许您根据 disabled 属性设置禁用状态的样式,因此您不必也操作元素的 class。它的可访问性也更好。
有关何时使用按钮和何时使用链接的详细说明,请参阅 Links are not buttons. Neither are DIVs and SPANs
你可以试试这个
<a [attr.disabled]="someCondition ? true: null"></a>
.disabled{ pointer-events: none }
将禁用点击事件,但不会禁用标签事件。要禁用选项卡事件,如果禁用标志为真,则可以将 tabindex 设置为 -1。
<li [routerLinkActive]="['active']" [class.disabled]="isDisabled">
<a [routerLink]="['link']" tabindex="{{isDisabled?-1:0}}" > Menu Item</a>
</li>
我的回答可能会迟到 post。它只能通过锚标记内的内联 css 来实现。
<a [routerLink]="['/user']" [style.pointer-events]="isDisabled ?'none':'auto'">click-label</a>
考虑到 isDisabled
是组件中的 属性,可以是 true
或 false
。
我用过
tabindex="{{isEditedParaOrder?-1:0}}"
[style.pointer-events]="isEditedParaOrder ?'none':'auto'"
在我的锚标签中,这样他们就不能通过使用 Tab 来使用 "enter" 键和指针本身来移动到锚标签,我们根据 属性 设置为 'none' ' isEditedParaO 命令'whi
只需使用
<a [ngClass]="{'disabled': your_condition}"> This a tag is disabled</a>
示例:
<a [ngClass]="{'disabled': name=='junaid'}"> This a tag is disabled</a>
考虑以下解决方案
.disable-anchor-tag {
pointer-events: none;
}
这是作为标签的锚标签:
[ngStyle]="{'pointer-events': isSaving ? 'none': 'auto'}"
而不是class.disabled,我们也可以绑定一个带有disabled属性的变量。这将仅用于按钮、输入和下拉菜单。 HTML disabled Attribute
例如:
<button [disabled]="isDisabled">Test</button>