2016-05-04 15 views
5

HashLocationStrategyを使用している間は、ページのリロードを行わずにブラウザのアドレスバーのアドレスを手動で変更することによってルートを変更できます。私。 mysite/#/homeからmysite/#/profileAngular2 pathLocationStrategy:URL変更の原因によるページのリロード

ただし、私がPathLocationStrategy(デフォルトのロケーション戦略です)を使用すると、同じことをしようとすると、私は望ましくないページリロードをします。私。ナビゲーションmysite/homeからmysite/profile

これを修正することは可能ですか?

私は角2.0.0-beta17 "設計どおり" だ

+1

あなたが実際に行っていることを見ることなく伝えるのは難しいです。どのように経路を変更しますか? –

+0

ブラウザのアドレスバーで手動で変更します。私。ハッシュロケーション戦略を使って 'mysite /#/ home'を' mysite /#/ profile'に変更すると、ルートを変更し、ページ全体をリロードしません。私のアプリケーションのロケーション戦略をPathLocationStrategyに切り替えて、 'mysite/home'を' mysite/profile'に変更しようとすると、望ましくないページ更新が行われます。 –

+0

これに応じて私の質問が更新されました。 –

答えて

5

を使用しています。 #...だけを変更すると、サーバーに送信するものはありません。 #...の部分は、常にブラウザによってのみ処理され、サーバーに送信されることはありません。

#の前に部品を交換し、#の前にすべてがあるよりも#がない場合、ブラウザはURLを取得するためにサーバに新しい要求を行う必要があります。

window.history... API(https://developer.mozilla.org/en-US/docs/Web/API/History_API)を使用する場合は、ブラウザにURLバーを更新するように指示しますが、サーバーには呼び出さないようにします。 角型ルータはこのAPIを使用します。これは、アプリ内から、または、戻るボタンまたは進むボタンを使用したときには動作しますが、手動でURLを変更した場合は機能しません。

2

あなたがルート変更にNG2ページリフレッシュなしでHTML5パス(PathLocationStrategy)を使用する場合は、routerLinkディレクティブを使用する必要があり、すなわち:@NgModuleのinit輸入で

<a [routerLink]="['/my-page']">My Page</a> 
<a [routerLink]="['/my-other-page']">My Other Page</a> 

RouterModule.forRoot([ 
    {path: '',    component: DefaultComponent}, 
    {path: 'my-page',  component: MyPageComponent}, 
    {path: 'my-other-page', component: MyOtherPageComponent} 
]); 
+0

これは実際に正しい答えです。 – jemiloii

+1

@jemiloiiそれは質問に答えていません。 routerLinkを使うのは、ユーザがリンクをクリックしたときに動作しますが、アドレスバーのアドレスを 'my-page'から' my-other-page'に変更してEnterを押すと、ページはまだリロードされます – Ryan

関連する問題