2015-01-09 37 views
2

我的角度應用程序使用UI路由器。我正在通過滾動到不同的點來監聽狀態變化。 (它基本上只是一個大視差滾動條)不觸發狀態更改的更新URL

所以我可以點擊菜單鏈接,帶我到正確的地方使用狀態機,但如果我想滾動使用鼠標滾輪,我希望它更新網址當我滾動,但需要避免URL更改觸發不必要的狀態更改。

如何更新url以反映滾動位置而不觸發狀態更改事件等?

+0

聽起來你是在談論防止無限循環在應對你造成的事件。一種解決方案是讓您的事件處理程序檢測到它已處於給定URL的正確狀態並且什麼也不做 –

+0

是的,那是一個選項。我現在就試試 –

回答

2

所以這確實到底招:

$state.go('STATE_NAME',null,{location:'replace',notify:false}) 
+0

不錯:許多事件系統都允許這種_silent_事件。 –

0

Angulajs在其$location對象上有一個html5模式,它允許您使用html5歷史API for url,這裏是angularjs docs。你會用這個鏈接到某些滾動位置。

這裏有一篇關於在an​​gularjs之外使用history api來改變url而不刷新的好文章。

有了這個,你可以觸發與JavaScript(使用歷史api)的URL的變化基於滾動位置/方式點。

if (scrollTop > 200) { changeUrl('some-url');} //Sudo code

編輯:根據意見,這將不會停止嘗試處理新更改URL的路由器,所以可能不適合所有的(實際上這個)的情況。

+0

我認爲問題是關於如何防止角度響應你自己造成的狀態變化 –

+0

你的意思是,路由器不會嘗試處理URL變化,我明白了。如果是這種情況,那麼是的,上述不會是正確的 – atmd

+0

胡安是對的。我需要防止路由器反饋 –