Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Angular2,禁用锚元素的正确方法是什么?_Html_Dom_Typescript_Angular_Angular2 Template - Fatal编程技术网

Html Angular2,禁用锚元素的正确方法是什么?

Html Angular2,禁用锚元素的正确方法是什么?,html,dom,typescript,angular,angular2-template,Html,Dom,Typescript,Angular,Angular2 Template,我正在处理一个Angular2应用程序,我需要显示--禁用一个HTML元素。正确的方法是什么 已更新 请注意*ngFor,这将阻止使用*ngIf而不完全呈现的选项 <a *ngFor="let link of links" href="#" [class.disabled]="isDisabled(link)" (click)="onClick(link)"> {{ link.name }} </a> 实际上,我需要防止元素被点击,而不仅仅是

我正在处理一个Angular2应用程序,我需要显示--
禁用
一个
HTML元素。正确的方法是什么

已更新

请注意
*ngFor
,这将阻止使用
*ngIf
而不完全呈现
的选项

<a *ngFor="let link of links"
   href="#" 
   [class.disabled]="isDisabled(link)" 
   (click)="onClick(link)">
   {{ link.name }}
</a>
实际上,我需要防止元素被点击,而不仅仅是用CSS显示。我假设首先可能需要绑定到
[disabled]
属性,但这是不正确的,因为锚元素没有
disabled
属性


我查看并考虑使用
指针事件:none
,但这会阻止我的
光标: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中指定
指针事件:无
将禁用鼠标输入,但不会禁用键盘输入。例如,用户仍然可以通过按Enter键或(在Windows中)单击该链接并“单击”该链接≣ 菜单键。您可以通过拦截
keydown
事件来禁用特定的击键,但这可能会让依赖辅助技术的用户感到困惑

禁用链接的最佳方法可能是删除其
href
属性,使其成为非链接。您可以通过条件
href
属性绑定动态执行此操作:


或者,如Günter Zöchbauer的回答,您可以创建两个链接,一个正常,一个禁用,并使用
*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>

刚刚遇到这个问题,想提出一个替代方法

在OP提供的标记中,有一个click事件绑定。这让我觉得元素被用作“按钮”。如果是这种情况,可以将它们标记为
元素,并将其样式设置为链接,如果这是您想要的外观的话。(例如,引导具有内置的“链接”按钮样式)

这有几个直接和间接的好处。它允许您绑定到
disabled
属性,设置该属性时将自动禁用鼠标和键盘事件。它允许您根据disabled属性设置禁用状态的样式,因此您不必同时操作元素的类。它也更便于访问

有关何时使用按钮和何时使用链接的详细说明,请参见

<a [attr.disabled]="someCondition ? true: null"></a>

将禁用单击事件,但不禁用选项卡事件。要禁用tab事件,如果禁用标志为true,则可以将tabindex设置为-1

<li [routerLinkActive]="['active']" [class.disabled]="isDisabled">
     <a [routerLink]="['link']" tabindex="{{isDisabled?-1:0}}" > Menu Item</a>
</li>

菜单项


我的回答可能会迟到。它只能通过锚标记内的内联css实现

我用过

tabindex="{{isEditedParaOrder?-1:0}}" 
[style.pointer-events]="isEditedParaOrder ?'none':'auto'" 
在我的锚定标记中,通过使用tab键使用“enter”键和指针本身,使它们不能移动到锚定标记,我们根据属性“isEditedParaO”将其设置为“无” 只需使用

<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'}"

所以我不想绑定到
[禁用]
,为什么不呢?用户仍然可以点击链接并按Enter。@MichaelLiu有趣,所以它还需要
(焦点)=“isDisabled(link)?false:true”
@GünterZöchbauer我搜索的每个角度问题,所以,你已经回答了!干得好@谢谢你,我觉得很有趣。遗憾的是,时间不多了。即使
元素缺少
href
它仍然可以单击,我刚刚验证了这一点……现在怎么办?仍然不完美。@DavidPine:我已经更新了我的答案来处理
点击
事件。在这个过程中,最大的缺点是你会失去搜索引擎优化,看看:你也可以在标记中使用
[attr.disabled]=“isDisabled(link)”
。@Sriram:不要在
标记上使用
[attr.disabled]
。它不符合标准,只能在Internet Explorer中使用,不能在Chrome或Firefox中使用。我认为这是不对的。Angular仍然传播(单击)绑定,因此它仍然会发生。请用这个创建一个plunker并在这里共享。@DavidPine我为它添加了一个plunker。我刚才引用了href标记,类似地,它可以在锚标记中使用
routerLink
指令。这不起作用,但它会使它看起来被禁用-实际上它仍然可以单击,因此根本无法解决问题。下面是正确的答案。。。为了解释为什么folk可能投票否决了这个看似不错的答案,它没有在锚元素中添加
disabled
(我希望它添加!),而是添加了
disabled=“true”
.disable-anchor-tag { 
  pointer-events: none; 
}
[ngStyle]="{'pointer-events': isSaving ? 'none': 'auto'}"