2017-07-18 70 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

相關問題