在角度2中,如果我有一个像 <button></button>这样的元素,我怎样才能有条件地向它添加一个像 [routerLink]="['SomeRoute']这样的属性指令呢?
<button></button>
[routerLink]="['SomeRoute']
据我所知,没有直接的方法可以做到这一点。有一些变通方法... 我用了这样的东西:
<button *ngIf="condition" [routerLink]="['SomeRoute']"></button> <button *ngIf="!condition"></button>
这里有一个类似的讨论: 链接
或者您可以简单地向属性添加一个条件。
<button [routerLink]="myVar ? ['/myScreen'] : []"></button>
仅当 myVar 为 true 时才重定向到’/myScreen’。
<div [ngClass] ='{"disabled-link":!isMicrositeEnable,"cursor-pointer":"isMicrositeEnable"}' [routerLink]="isMicrositeEnable ? ['/microsite'] : []">
如果您不想复制元素,只是想根据条件防止点击,您可以执行以下操作:
<button [style.pointer-events]="condition ? 'auto' : 'none'" routerLink="/some/route" > </button>
只是个小细节。尽量避免使用导航按钮。屏幕阅读器不会理解,这是一个导航出框。现在您需要添加一个 Aria-label,告诉屏幕阅读器它的功能。这将添加更多代码。但是简单的解决方案是将[ routerLink ]添加到锚链接中。然后把它设计成一个按钮。但我更喜欢使用标准的蓝色链接,因为人们通常知道会发生什么。我永远不会右键点击一个按钮,然后在新标签页上打开它。因此: 用于操作的按钮和用于导航的锚链接
这在角度10中对我很有用:
<button routerLink="\{\{MyVar == true ? '/route/' + item.id : '/same/route'}}"></button>
这是工作样本。当您需要带来多个条件时,您可以具有如下内部条件
<a class="dropdown-item" href="javascript:void(0);" [routerLink]="app.treatment === 'X' ? ['/route1', app._id] : app.treatment === 'Y' ? ['/route2', app._id] : ['/route3', app._id] ">Go</a>
我不会使用一个按钮与 RouterLink。A 会使用一个类似按钮的锚链接来完成这项工作。按钮元素用于操作,锚用于路由/导航。 下面的代码将告诉浏览器/屏幕阅读器等它是什么。
<a *ngIf="condition" class="make_it_look_like_a_button" [routerLink]="['somehere']">test</a> <button *ngIf="!condition">Test</button>
当右键单击它时,上面的链接案例将有“在新标签中打开...”。但它的一个缺点是,当它作为一个按钮时,几乎没有人会想到它。
最简单的方法是将条件包装在三元运算符中,如下所示:
<button [routerLink]="(myVar ? if_true : if_not_true)"></button>