2017-09-25 18 views
1

PathLocationStrategyの既存のAngular 4アプリをHashLocationStrategyに移行しており、エントリポイントのURLを機能させる必要があります。それは何かのように見えますwww.test.com/?param1=123HashLocationStrategyとクエリのパラメータ(角4)

問題は、私がHashLocationStrategyに切り替えるとすぐに、activate paramにactivatedRoute.queryParamsでアクセスできなくなることです。 (www.test.com/#/?param1=123はうまく動作しますが、元のURLエントリも保持する必要があります)

param1の値をwww.test.com/?param1=123からHashLocationStrategyに変更する方法はありますか?私はそれを回避できない限り、www.test.com/#/?param1=123にリダイレクトされる空のリンク先ページを作成したいとは思っていません。 HashLocationStrategy以来

+0

ルートの変更は、通常、古いURLが新しいURLにリダイレクトされることを意味します。したがって、一般的に、サーバー側からこれを行うのが理にかなっています。 '/?param1 = 123'のようなレガシールートパスだけでなく、'/foo/bar'のような他のパスも存在します。 HashLocationStrategyを使用すると、アプリがSPAでないことがよくあります。それは...ですか? '/?param1 = 123#/?param1 = 456'のようなURLは理論上存在する可能性があるので、これをどのように扱うべきかによって異なります。 – estus

+0

私はエントリのURLだけを気にし、残りのURLは問題ではなく、変更することができます。 HashLocationStrategyを動かす理由は、S3バケットから提供されたSPAを取得しているため、Angularが作成するURLに対してサーバー側のサポートを追加するのは難しいことです。サーバー側のリダイレクトは、URLの#でうまく動作しません。 – Leo

+0

正常に動作します。サーバー側から#を読むのに問題はありますが、設定に問題はありません。 Angularの中でこれを行うことは可能ですが、サーバー側からはるかにクリーンです。 currentUrlが '/'でなければLocationヘッダを '' /# '+ currentUrl'に設定すれば、すべてのSPAのURLをカバーします。 – estus

答えて

0

がすでにデフォルトとして使用され、PathLocationStrategyは、さらに実際のブラウザの場所に到達するために注入する必要があります。

providers: [ 
    PathLocationStrategy, 
    {provide: LocationStrategy, useClass: HashLocationStrategy}, 
    ... 
    ] 

... 

class AppComponent { 
    constructor(router: Router, pathLocationStrategy: PathLocationStrategy) { 
    const basePath = pathLocationStrategy.getBaseHref(); 
    const absolutePathWithParams = pathLocationStrategy.path(); 

    if (basePath !== absolutePathWithParams) { 
     router.navigateByUrl(absolutePathWithParams); 
    } 
    } 
} 

ベースURLがある場合、それはさらに、パスから離れて撮影する必要があります。

+0

何らかの理由でこれを動作させることができません。 HashLocationStrategyをデフォルト( 'import:[RouterModule.forRoot(routes、{useHash:true})]、')として定義すると、basePathとabsolutePathWithParamsの両方が空の文字列になります。 – Leo

+0

私はこれを確認できません。あなたがここで見ることができるように、それはプランナーでも、期待どおりに動作します。http://plnkr.co/edit/rEWLGykANUMReFqNVPno?p=preview – estus

+0

ああ、ありがとうございました。私はルート上に別のコンポーネントをセットアップしようとしている間に、AppComponentでリダイレクトを行うべきであることを理解しました。 – Leo

関連する問題