2014-04-16 60 views
0

如果我沒有使用angular,那麼會加載路由mylink,然後瀏覽器向下滾動到sectionid部分。如何讓/ mylink#sectionid在angularjs中工作?

在Angular中它不會滾動。我閱讀了一些完全瘋狂的解決方案,包括注入多個模塊並擁有瘋狂的唯一URL。我拒絕做這樣的事情。

我希望我的href值保持標準。 Angular有沒有辦法做到這一點?請記住,如果「mylink」已經加載,那麼鏈接工作正常,但如果我在不同的頁面上,說「家」,然後我導航到mylink#sectionid,然後滾動贏得'發生。

(我的意思是......如果角度不能做到這一點,我會認爲這是一個錯誤。這將會是荒謬的,不支持經常使用的語法,因爲今天仍在使用上世紀90年代)

編輯:我認爲這個問題可能是在這個網站上的AJAX量。

回答

0

這當然是可能的,你需要在$anchorScroll注入到控制器中

example from the angular site

function ScrollCtrl($scope, $location, $anchorScroll) { 
    $scope.gotoBottom = function(){ 
    // set the location.hash to the id of 
    // the element you wish to scroll to. 
    $location.hash('bottom'); 

    // call $anchorScroll() 
    $anchorScroll(); 
    }; 
} 

從,你可以通過參數處理這個花葯路線傳遞到路徑和滾動時基於路由參數進行初始化。

+0

而href屬性值可能仍然是「/ myLink的#sectionid」或現在它需要調用函數的角度上gotoBottom NG-點擊? 我正在尋找一種解決方案,它採用了二十年前發明的錨標籤的基本前提。 –

+1

我不這麼認爲,angular基本上是劫持URL的哈希標記機制,以便在不同的視圖之間提供客戶端路由,在我看來,這是一個可以在頁面內無滾動的滾動代碼的可靠交易。也就是說,你可能會創建一個指令來處理錨標籤的點擊事件,以便在我的答案中調用上面描述的代碼。 – Brocco

+0

好的建議。我會看看其他人是否有任何想法,否則我會調查該選項。 –

0

我不是我的解決方案的一大風扇,但我聽onRouteChange,再注入anchorScroll和1000毫秒超時後只需撥打anchorScroll因爲哈希已設置沒有更多需要做的事情。 [給所有有角度的東西提供時間去完成自己的工作(我正在處理的網站有完全過多的AJAX,但是我還沒有對數據進行控制,所以我無能爲力)]

任何人都可以手動啓動錨點滾動。如果有人知道一個更好的方式來做到這一點,那將是膨脹的。