2016-05-11 11 views
3

ユーザーがページに到着した方法に応じて複数のルート名を使用できますが、同じRouteConfigパスを維持できますか?Angular 2の同じページの複数のルート名

例えば

@RouteConfig([ 
    { 
    path: 'sweet/:id', 
    name: 'SweetDetailLandingPage', 
    component: SweetDetailComponent, 
    data: { fromLink: false, fromDeepLink: true } 
    }, 
{ 
    path: 'sweet/:id', 
    name: 'SweetDetailFromLink', 
    component: SweetDetailComponent, 
    data: { fromLink: true, fromDeepLink: false } 
    } 
]) 

ユーザーがブラウザにURLを入力した場合、私はアプリがSweetDetailLandingPageをロードしたいです。ユーザーが内部でnavigate(['SweetDetailFromLink'])経由でページに到着した場合は、SweetDetailFromLinkをロードします。

理由は、ユーザーがディープリンク経由で到着したかどうかを判断し、ロード時に特定の関数を呼び出すことができるためです。

私はこのコードを試しましたが、アプリケーションが競合が発生しているというエラーを投げます。

ORIGINAL EXCEPTION: Configuration 'sweet/:id' conflicts with existing route 'sweet/:id' 

私は矛盾がある理由を理解しています。私は上に説明したものを実装する方法があるかどうか疑問に思っています。

+0

は、あなたのコントローラでこれをチェックすることはできません代わりに(ユーザーがページにどのようにアクセスしたか) – Arg0n

答えて

2

私は別の方法を使用します。 window.location.hrefを外側または(ルートコンポーネントのコンストラクタでAngular内で動作する場合)読み込み、ディープリンクを取得してそこからリダイレクトします。

ディープリンクを読み込むことができるアプリケーションライフサイクルの間に1つの時間しかありません。これは、アプリケーションが読み込まれるときです。 その後、URLを変更すると常にページの再読み込みが行われます。その後ディープリンクに到達する唯一の方法は、あなたの角度アプリケーションのコードである(routerLinkまたはrouter.navigateXxx()は、あなたの代わりにデフォルトの `PathLocationStrategyHashLocationStrategyを使用している以外

0
私はそのような場合にはどうなるのか

です。routerLinksにクエリ文字列パラメータを追加しthis._router.navigate(['SweetDetailLandingPage', {fromDeepLink: 'true'}]); と、あなたはそのパラメータを求めるあなたはディープリンクから来た場合は何かをdesideたりしないようにしたいloadメソッドで:

if (this.getParameterByName('fromDeepLink') === 'true'){ 
    //do something 
}else{ 
    //do something different 
} 
関連する問題