2014-01-18 61 views
4

我們正在使用angularJS和角度ui路由器,並希望更改地址欄中的URL,但保持視圖/狀態相同。AngularJS更改URL但不是視圖

我試過使用歷史pushstate,但我有衝突導致無限$摘要循環。

我也嘗試了同步()https://github.com/angular-ui/ui-router/wiki/Quick-Reference#urlroutersync中描述的方法 - 其實質上在$locationChangeSuccess上調用preventDefault。但是,這似乎並不奏效 - 正如本文所示:http://plnkr.co/pLC2Ai

有沒有人知道這個問題的任何解決方案?

+0

當我點擊路線1時,它將更改爲狀態1,路線2:狀態2.什麼不行,它應該做什麼? – Philipp

+0

它不應該顯示狀態(與現在對比)。我只是更新了plunker,所以你可以看到$ location.path(),我想看到的動作不是改變狀態,而是改變路徑。 – wlingke

+0

隨着零件的更換,你的字面意思是你在plunker中看到的URL嗎?因爲你應該檢查你的代碼的iframe運行http://run.plnkr.co/plunks/pLC2Ai/ – Philipp

回答

2

當然,我的隊友! :)

使用$stateChangeStart,不$locationChangeSuccess

+0

我試過這個。它曾經在角度ui路由器的舊版本中工作,但它不再。它可以防止狀態和路徑改變。 http://plnkr.co/zq3WYq – wlingke

+0

這個怎麼樣? http://plnkr.co/edit/3tRKtG?p=preview – Miraage

+0

真的很接近......你不能看到對plunker的影響,因爲他們不改變地址欄,但我只是在我的應用程序中試過。地址欄不會改變,但'console.log($ location.path())'確實顯示正確。 – wlingke

0

你有沒有試過history.pushState方法?

在Mozilla的網站上說:「這會使URL欄顯示http://mozilla.org/bar.html,但不會導致瀏覽器加載bar.html,甚至不檢查bar.html是否存在。」

history.pushState(stateObj, "page 2", "bar.html"); 

您可能需要注入$ locationProvider,然後設置$ locationProvider.html5Mode(true)。

+0

是的,我曾嘗試過。它與角度衝突,往往會導致無限的摘要循環。看看這裏:http://run.plnkr.co/plunks/9afPBd/和http://plnkr.co/edit/9afPBd?p=preview這個問題是在angularJS的問題日誌中記錄的,但是沒有修復然而 – wlingke

相關問題