angular 2の新しいルーター(rc.1)で新しいものをプッシュする代わりに、履歴を置き換える方法は?
たとえば、質問リスト内のIm(/questions
)新しいルートで新しいモーダルを開く(/questions/add
)、新しい質問を追加した後、質問ビューに移動します(/questions/1
)。後ろに押すと、/questions
の代わりに /questions/add
使用する場合
router.navigate
その後
location.replaceState
まったく同じパスを使用して、通常発生する変更をトリガーしたり、履歴を置き換えたりできます。
たとえば、あなたの場合:
this.router.navigate(['questions/1']);
this.location.replaceState('questions/1');
ルートにパラメーターを追加する必要がある場合は、場所のURLを作成できます
router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));
あなたの例では:
this.router.navigate(['questions/1', {name:"test"}]);
this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));
angularルーターには RLオプションの置き換え が付属しているようです。あなたの例では:
this.router.navigate(["questions/1"], {replaceUrl:true});
現在の issue があり、短時間で複数のナビゲーションを行ってもURLが正しく置き換えられない場合があります。一時的な回避策として、ナビゲート関数をタイムアウトでラップして、それぞれを個別のサイクルで起動します。
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});
LocationsクラスのreplaceStateを使用したい
https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!#replaceState-anchor