私はメインのAppComponentにインポートされる左のナビゲーションコンポーネントを持っています。私が実装しようとしているのは、左側のナビゲーションでリンクをクリックし、親AppComponentのルータ出口にDataComponentをロードする機能です。ルータコンセントを子コンポーネントからどのようにターゲット設定できますか?
私の親AppComponentは次のようになります。
@Component({
selector: 'left-nav',
directives: [ ROUTER_DIRECTIVES ],
providers: [ ROUTER_PROVIDERS ],
template: '<a [routerLink]="[ 'Data' ]">Show Me Data</a>'
})
と私はルータ、アウトレットにロードしようとしているDataComponentは次のようになります。このようになります
import { LeftNavComponent } from 'app/left-nav/left-nav.component';
import { DataComponent } from 'app/data/data.component';
@Component({
selector: 'main',
template: '<left-nav></left-nav><router-outlet></router-outlet>',
directives: [ROUTER_DIRECTIVES, LeftNavComponent]
})
@RouteConfig([
{path:'/data', name: 'Data', component: DataComponent}
])
私の子供LeftNavComponent :
@Component({
selector: 'data',
templateUrl: 'This is where the data will be'
})
リンクをクリックすると、URLが/ dataに変わりますが、 DataComponentは実際にはロードされません。これは 'これはデータの場所です'というテキストが表示されないためです。
ルーターリンクがAppComponentテンプレートに置かれた場合にテキストが表示されるため、ルーターリンクが子コンポーネントにあるように見えるため、RouteConfigが正常に動作していることを確認しました。
ご協力いただければ幸いです。
感謝。私は両方を試みましたが、どちらもうまくいかないようです。/Dataは正しいURLにナビゲートしますが、コンポーネントはロードされません。 ../Dataはこの例外をスローします:Link "[" ../Data "]"は "../"セグメントが多すぎます。 – amuramoto
'[ROUTER_PROVIDERS] 'はルートコンポーネント' AppComponent'では 'bootstrap' **または**に追加されるべきですが、他のコンポーネントでは** never **と追加されるべきです。 –
あなたのコードには他の問題がありました。 'template'の代わりに' templateUrl'を使います(コピー&ペーストの問題でしょう)。 'left-nav'のテンプレートのまわりの' ''は '' data''の周りの '' 'と衝突します。私はアウターをバックティックに変更しました(たぶんコピーペーストの問題でもあります)。 [** Working Plunker **](https://plnkr.co/edit/9ljkpB?p=preview) –