2017-02-28 15 views
2

私が使用しています「#はsomeElementId」:は角度のhrefに相当2 =

gotoAbout() { 
    this.router.navigate(['/'], { fragment: 'about' }) 
} 

ためrouterLinkとのhref =「について#」私は私のルート/ページ上ではなかった場合、私のページにリロード。ナビゲーションボタン上でこの機能を使用すると、ページをリロードせずにワンクリックで/#にナビゲートすることができますが、問題はそれがスクロールされたときにhref = "#about"のようにジャンプすることではありませんページ上にこれを角度で達成する方法はありますか?

+0

http://stackoverflow.com/questions/36201624/autoscroll-in-angular-2 – yurzui

+0

から[ドキュメント](https://angular.io/docs/ts/latest/api/router /index/RouterLink-directive.html):次のようにクエリのパラメータとフラグメントを設定できます。 <[routerLink] = "['/ user/bob']" [queryParams] = "{debug:true}"フラグメント= "education"> –

+0

私はurl.com/#aboutにアクセスし、url.com/somethingelse/somethingelseからdiv id = "about"にジャンプしようとしています。だから、私は/#とそのあとdivジャンプの前に、リロードしていないルータが必要です。デバッグとは何ですか?行う? paramsに?debug = trueを設定するのか、それともルーティング後にフラグメントジャンプするのでしょうか? – seanEd

答えて

0

次のように、私の解決策は行く:

私のナビゲーションバーには、(クリック)し '約' ボタンを持っている= "gotoAbout();" :

gotoAbout() { 
    let tree = this.router.parseUrl(this.router.url); 
    if (tree.fragment == 'about') { 
     let element = document.querySelector("#" + tree.fragment); 
     if (element) { 
     element.scrollIntoView(element); 
     } 
    } 
    else { 
     this.router.navigate(['/'], {fragment: 'about'}) 
     .then(() => { 
      let tree = this.router.parseUrl(this.router.url); 
      let element = document.querySelector("#" + tree.fragment); 
      if (element) { 
      element.scrollIntoView(element); 
      } 
     }); 
    } 
    } 
0

これは少しハックようだが、それは動作します:あなたのコンポーネントで

テンプレートで

goToDiv(fragment: string): void { 
    window.location.hash = fragment; 
} 

<a (click)="goToDiv('destination')">Go to div</a> 

<div id='destination'> 
    <h2>Destination</h2> 
</div> 

編集:@JB Nizetがあるコメントで述べたように試してみることもできます:

<a [routerLink]="['/user/bob']" [queryParams]="{debug: true}" fragment="education"> 
    link to user component 
</a> 
興味がある人々のために

https://angular.io/docs/ts/latest/api/router/index/RouterLink-directive.html

+0

Hackyは問題ありませんが、私の(クリック)ルータの前にこのgoToDivの作業がありますので、#についてはbodyページに約divが表示されるため、ルーティングが完了するまでdivはdomに表示されません。 – seanEd

+0

フラグメントをキャプチャし、InitでgoToDiv()を実行できます。編集:この文書によれば、このようなものでうまくいくことができます: 'this.router.navigate(['/ results']、{fragment: 'top'}); ' – mickdev

+0

私は、いくつかのオプションの中から何を表示するかを決定するためにActivatedRouteから、私がそれをしなかった場合、これはうまくいくでしょう:P ill今あなたのgotodivソリューションを試してください – seanEd