没有会导致这种标记的解决方案<a routerLink="" attributeSelectorForComponent></a>
。
您尝试的解决方案不起作用,因为stopImmediatePropagation
旨在防止事件冒泡,并且preventDefault
旨在防止此类事件的默认浏览器行为(例如:提交事件将触发POST
请求)。在任何一种情况下,Angular 都会收到该事件的通知并做出相应的反应。
RouterLink
如果指令具有exportAs
属性,则可能有一个干净的解决方案。在这种情况下,可以通过RouterLink
自定义指令来控制。不幸的是,事实并非如此(RouterLink 来源)
剩下的唯一选择是RouterLinkWithHref
像这样扩展指令:
@Directive({
selector: "a[myRouterLink],area[myRouterLink]"
})
export class MyDirective extends RouterLinkWithHref implements OnChanges {
@Input()
myRouterLink;
@Input()
myDisabled;
constructor(
private myRouter: Router,
private myRoute: ActivatedRoute,
private myLocationStrategy: LocationStrategy,
private host: ElementRef
) {
super(myRouter, myRoute, myLocationStrategy);
}
ngOnChanges() {
if (this.myDisabled) {
this.host.nativeElement.setAttribute("disabled", "disabled");
this.routerLink = null;
} else {
this.host.nativeElement.removeAttribute("disabled");
this.routerLink = this.myRouterLink;
}
}
}
这给出了以下标记:<a myRouterLink="a" [myDisabled]="disabled"></a>
请注意,对于完整的工作解决方案,您还必须扩展RouterLink
您可以在此处尝试演示:https ://stackblitz.com/edit/angular-p2w4ff