1

私は組み込みWebサイトの一部となる単一ページのAngular 2.2.0アプリケーションを構築しています。このサイトには半ページ12のページがあり、Angular SPAは/application.htmlになります。アプリケーションはさまざまな時間にさまざまなコンポーネントを表示/非表示にします。これはルータを使用して運転しています。Angular2ルータの手をブラウザのアドレスバーから離しておく

ユーザーがSPA内の場所をブックマークできるようにする必要がないため、/application.htmlのURLを維持したい場合、Webサーバーは「見つからない」URLを別の場所にマップするように構成できません。それはSPAを他のウェブサイトとより良く共存させるでしょう。残念ながら、これは角度ルータがどのように設計されているかではありません。それは、reeeeallyブラウザのアドレスバーで遊びたいです。

私はこれの2つの結果を取り組んだ。具体的には、コードが新しい場所にジャンプしたときにskipLocationChangeプロパティを使用しています。テンプレートに<a routerLink=...ツールを使用してリンクを作成していません。しかし、私が取り組まなかった3番目の問題があります。開始時にアドレスバーをクリアする角度。

Angularのルーターは、アドレスバーの初期値がホストページに指定されているbaseの値と等しい必要があるようです。通常の<base href="/">の場合、アドレスバーは最初にexample.com/に設定されます。代わりに<base href="/application.html">を使用すると、アドレスバーはexample.com/application.html/に初期化されます(末尾は/、シガーは閉じていません)。これはすべて非常にイライラです。ルータにアドレスバーの制御権を必要とする理由はありません。

Angular 2ルータがブラウザのアドレスバーを邪魔しないようにする方法はありますか?または、私がルータを使用しない場合、さまざまなコンポーネントが表示され消えるかどうかをプログラム状態で判断する方法はありますか? (後者は実際にはすべての可能な世界の中で最高です;ルータシステムはかなり制限されています)。

+0

ルータmoduを作成するときに、useHashのextraオプションをtrueに設定します。https://angular.io/docs/ts/latest/api/router/index/RouterModule-class.html –

+0

@JBNizetありがとう;それはクリーンなものですが、アドレスバーにはまだschmutzがあります。 –

+0

ルータのポイントは、URLをコンポーネントにマップし、URLをナビゲートすることです。 –

答えて

1

ルーティングの利点は、URLによる状態管理にあります。その状態管理は必要ないので、ルーティングをまったく使用しません。コンポーネントを使用して「ページ/ビュー」をロードする

<page-one *ngIf="showPageOne"></page-one>, etc.... 

まだ使用していない角度のない読み込みコンポーネントの利点があります。それ以外の場合、私はハッシュ戦略を使用します。

+0

だから、親コンポーネントのテンプレートに表示される可能性のあるすべてのコンポーネントをリストし、可視性をある値で管理する必要があります。 (しかし、私は現在ルータの設定で同じことをしなければならない) –

+0

はい、かなり。いずれにしても、アプリのどこかにすべての可能なコンポーネントのリストが表示されます。ルーティングを使用しているかどうか。 – Everett

+1

提案された[NgComponentOutlet](https://github.com/angular/angular/pull/13383)機能に関するご意見はありますか? –

関連する問題