2016-10-26 5 views
0

ユーザーがリンクをクリックしたときにブラウザウィンドウの上部にジャンプするようにAngular2ルーターを設定する方法はありますか?角2の新しい長いページへの長いページ遷移がトップにジャンプしますか?

のAng2への最初の暴露ので、私たちは、各タイルが簡単な製品のリストであるタイルの単純なリストを持っている

一見noobish Q.

ご容赦、タイルをクリックすると、製品の詳細ページにユーザーを取ります。 ..すべて素晴らしい作品。

リストは長いです

我々はハックを置くことができる...ブラウザウィンドウが背が高いし、ユーザーがクリックする製品のブラウザ垂直スクロールバーを入れたまま言ったときの製品ページは、同等以上の長さのものである場合(例:Scroll to the top of the page using JavaScript/jQuery?)をブラウザにスクロールして強制的にスクロールさせますが、これはルータが何かするべきであるはずですか?

+0

https://github.com/Nolanus/ng2-page-scrollが処理しますが、他のパッケージもあります。 Angular2は、最終的にJSの上に構築されたフレームワークです。私はwindow.scrollToを使用しているとは言わないでしょう。ハック、それは言語のネイティブ機能を使用しています。 – silentsod

+0

これをチェックしてください:http://stackoverflow.com/questions/39601026/angular-2-scroll-to-top-on-route-change –

+0

これは素晴らしいソリューションです、ありがとうございます。もしこれが構成可能な上位の考えであったとしても、例えば '{path: 'topic /:id'、component:TopicViewComponent、onloadscrolltotop:true} – John

答えて

0

ルーターの変更ごとにページを一番上にスクロールするには、app.component.ts(子を遅延ロードする場合)またはルーティングが発生する親コンポーネントにルーターイベントを追加します。

import { Router, Event as RouterEvent, NavigationEnd} from '@angular/router'; 

constructor(private router:Router){ 
    router.events.subscribe((event: RouterEvent) => { /* detects route/navigation change*/ 
     this.scrollToPageTop(event); 
    }); 
} 

scrollToPageTop(event: RouterEvent): void { /* scroll to top on each navigation */ 
     if (event instanceof NavigationEnd) { /* trigger on navigation ends */ 
      document.documentElement.scrollTop = 0; /* for IE */ 
      document.body.scrollTop = 0; /*for chrome */ 
     } 

} 
関連する問題