2017-07-18 42 views
1

在vanilla JS中,通过preventDefault()很容易阻止导航链接。但是,在Angular中,它似乎并不那么容易,我不确定什么是正确的解决方案。例如,我有一个顶级菜单,其中某些项目在某些条件下拉下来,并且应该在点击时打开,而在其他项目中应该像正常链接一样运行。我做了我认为我通常会做的事情:在某些情况下阻止路线导航

toggleMenu(event: Event) { 
    event.preventDefault(); 
    // Usual logic goes here 
} 

但是,这并不能阻止导航,我不知道如何阻止它。我可以通过在服务的每个链接上设立警卫来阻止它,让它变得更加复杂,但这绝对会让人感觉过度。有什么建议?

+1

你想阻止'routerLink'吗? – cgTag

+0

是的,抱歉,如果不明确。 – RhoVisions

回答

3

这是一个很好的问题,在RouterLink源代码中没有明确的意图表明支持禁用点击处理程序。

如果您将null分配给路由器链路,它将路由到当前路由。这与不改变路线基本相同,但我不知道这是否会触发路线改变。

<a [routeLink]="condition ? '/my/route/address' : null">Link</a> 

condition可以是一个模板变量或者你可以调用组件的方法,如果你需要计算更复杂的东西。关键是在想要禁用链接时产生null

+0

谢谢;我会看看它是否会触发路线更改。 – RhoVisions

相关问题