重要なアプリケーションとのナビゲーション コンポーネントの同期をどのように維持しますか? たとえば、Angular 2 の単純な Tour of Heroes アプリケーションでは、app.component.ts
静的な (つまり不変の) 宣言型ナビゲーションがあります。
<h1>{{title}}</h1>
<nav>
<a routerLink="/dashboard" routerLinkActive="active">Dashboard</a>
<a routerLink="/heroes" routerLinkActive="active">Heroes</a>
</nav>
<router-outlet></router-outlet>
しかし、より複雑なアプリケーションでは、ナビゲーション コンポーネントが動的であることがよくあります。私の場合、nav
sidenav 、戻るボタン、コンポーネント固有のアクション、およびユーザー情報があります。また、サイドナビゲーションとアクションは、ユーザーの役割に応じて変化します。これはかなり典型的なシナリオです。Google Gmail、Inbox、Calendar、Docs などを考えてみてください。
現在、myは、現在のコンポーネントとユーザーの役割について多くのテストを行って実装さnav
れた単一のコンポーネントになっています。これは醜い悪夢です。my-header
*ngIf
<md-toolbar color="primary" class="fixed-toolbar">
<div *ngIf="isAuthenticated()">
<md-menu #mainmenu="mdMenu">
<a md-menu-item routerLink="/marketplaces" routerLinkActive="active">Marketplaces</a>
<a md-menu-item routerLink="/people" routerLinkActive="active">People</a>
<span *ngIf="isAdministrator()">
<md-divider></md-divider>
<a md-menu-item routerLink="/accounts" routerLinkActive="active">Accounts</a>
</span>
</md-menu>
<button *ngIf="_navigation?.toolbar == 'default'" md-icon-button [md-menu-trigger-for]="mainmenu">
<md-icon>menu</md-icon>
</button>
<button *ngIf="_navigation?.toolbar == 'market'" md-icon-button
(click)="closeAndReturn($event, 'marketplaces')"
aria-label="Back to Marketplaces">
<md-icon>close</md-icon>
</button>
<button *ngIf="_navigation?.toolbar == 'person'" md-icon-button
(click)="closeAndReturn($event, 'users')"
aria-label="Back to People">
<md-icon>close</md-icon>
</button>
</div>
<!-- ^^^ nightmare continues vvv -->
my-header
コンポーネントは単純に に含まれていますapp.component.html
:
<my-header></my-header>
<router-outlet></router-outlet>
<my-footer></my-footer>
しかし、my-header
コンポーネントもコンポーネントもmy-footer
ルーターツリーにないため、常にルートノードがmy-header
注入されます。つまり、絶対的な戻るナビゲーションにActivatedRoute
移行することさえできません。
(click)="closeAndReturn($event, 'marketplaces')"
相対ナビゲーションへ:
(click)="closeAndReturn($event, '../')"
これは、同期を維持するために、この 1 つのコンポーネントでルーター ツリーを複製することを意味します。これは明らかに正しいことではありません...
ナビゲーション コンポーネントを複雑なアプリケーションと同期させるという、おそらく非常に一般的なこの課題をどのように解決するかについてのアイデアはありますか?