これは、子ルータを使用すると、よりクリーンな方法で行うことができます。あなたの親コンポーネントのTS /のJSファイルにこのような子ルータを設定することができます。
configureRouter(config: RouterConfiguration, router: Router){
config.map([
{ route: 'tab-1', name: 'tab-1', moduleId: 'tab-1/tab-1', nav: 'true', title: 'Tab 1' },
{ route: 'tab-2', name: 'tab-1', moduleId: 'tab-2/tab-2', nav: 'true', title: 'Tab 2' },
{ route: 'tab-3', name: 'tab-3', moduleId: 'tab-3/tab-3', nav: 'true', title: 'Tab 3' }
)
}
を私は「タブ - *」それらの名前上記のコードでは、すべてのタブカスタム要素を確認します。
あなたはその後、先に行くと、あなたのタブ付きナビゲーションのための新しいコンポーネントを作成することができます
(あなたは常に親コンポーネントにナビゲーションロジックを置くことができますが、私はきれいになるこのアプローチを見つけ、モードモジュラー及び再利用可能)
tabnav .TS
import {bindable} from 'aurelia-framework';
import {Router} from 'aurelia-router';
export class TabnavCustomElement{
@bindable router: Router;
}
tabnav.html
<template>
<ul>
<li repeat.for="navItm of router.navigation">
<a href.bind="navItm.href" class="nav-link ${navItm.isActive ? 'active' : ''}">${navItm.title}</a>
</li>
</ul>
ザ・あなたがparent.htmlに移動し、このようにそれを含めることができます。
<tabnav router.bind="router"></tabnav>
<router-view></router-view>
<router-view>
は、タブあなたがクリックして、その内容に応じて変化します。タブ間で状態を共有したい場合は、3つのカスタム要素のそれぞれに注入できる共有サービスを作成することができます。
また、新しいタブを追加するたびに、そのタブの新しいカスタム要素を作成してルータに配置するだけです。
各タブに「router-view」とcustom-elementsが1つだけあれば簡単だと思います。彼らはあまりにも多くの情報を持っている場合は、タブを変更するときにデータを読み込むことができます –
さん、これは動作しますか?私は、カスタム要素/コンポーネントがボタンが示すべきナビゲーション可能であることを意味します。この場合、ビューは別のビューにルーティングされ、 "タブ"の内容全体が置き換えられる必要があります。 – timmkrause