当前位置: 首页 > 面试题库 >

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

史谦
2023-03-14
问题内容

我正在 Angular2 应用程序上工作,我需要显示-但是disable<a> HTML 元素。正确的方法是什么?

更新

请注意*ngFor,这会阻止使用选项,*ngIf而不是<a>完全渲染。

<a *ngFor="let link of links"
   href="#" 
   [class.disabled]="isDisabled(link)" 
   (click)="onClick(link)">
   {{ link.name }}
</a>

打字稿 组件有一个方法,看起来像这样:

onClick(link: LinkObj) {
    // Do something relevant with the object... 
    return false;
}

我实际上需要防止元素被单击,而不仅仅是与 CSS
一起出现。我以为我首先需要潜在地绑定到[disabled]属性,但这是不正确的,因为锚元素没有disabled属性。

我查看并考虑过使用,pointer-events: none但是这妨碍了我的cursor: not-allowed工作方式-这是要求的一部分。


问题答案:

pointer-events: none在CSS中指定会禁用鼠标输入,但不会禁用键盘输入。例如,用户仍然可以选择链接并通过Enter按键或(在Windows中)≣ Menu键“单击”它。您可以通过拦截keydown事件来禁用特定的击键操作,但这可能会使依赖辅助技术的用户感到困惑。

禁用链接的最佳方法可能是删除其href属性,使其成为非链接。您可以使用条件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ünterZö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>

这是一些使链接看起来被禁用的CSS:

a.disabled {
    color: gray;
    cursor: not-allowed;
    text-decoration: underline;
}


 类似资料:
  • 我正在开发一个Angular2应用程序,我需要显示—但是<code>禁用<code>一个<code> 更新 请注意,这将阻止使用而不渲染 ,但是这妨碍了我的< code>cursor: not-allowed风格的工作——这是需求的一部分。

  • 我创建了一个元素列表,我想更新其中一个列表元素 这是对update方法的调用: 这是更新方法: 在该方法中,我收到警告“从方法生成函数”,并建议“方法‘update\elem’可能是‘static’” 更新列表元素而不收到警告的正确方法是什么?

  • 我有一个带有两个按钮的tkinter应用程序<代码>运行应用程序和。我不想让最终用户有机会单击,如果他没有先单击。 因此,按钮需要在首先单击按钮后取消禁用。 在下面的代码中,我创建了一个检查器函数,它应该在上面完成,但是存储数据按钮总是处于禁用状态。 这是我的代码:

  • 问题内容: 假设我有一个React类P,它渲染了两个子类C1和C2。 C1包含一个输入字段。我将此输入字段称为Foo。 我的目标是让C2对Foo的变化做出反应。 我已经提出了两种解决方案,但是它们都不对。 第一个解决方案: 为P分配一个状态,。 在P中创建一个函数,该函数接受一个事件并设置。 将其作为传递给C1 ,然后让C1绑定到Foo。 这可行。每当Foo的值改变时,它都会触发P中的a,因此P会

  • null null 就像在我的示例中一样,如果我有一个C1的大型呈现,我真的不想仅仅因为C1有一个form元素就把C1的整个放到P的中。 我该怎么做?

  • 问题内容: 在Angular1中,可以通过配置$ http-provider解决此问题。喜欢: 在Angular2中做同样的事情是什么好习惯? 在Angular2中使用http请求,我们需要使用Http类。当然,将CSRF行添加到每个后功能调用中不是一个好习惯。 我猜在Angular2中,我应该创建自己的类,该类继承Angular2的Http类并重新定义后功能。是正确的方法还是更优雅的方法? 问题