2016-04-12 10 views
2

私はメインの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が正常に動作していることを確認しました。

ご協力いただければ幸いです。

答えて

0

私は、これはあなたが欲しいものだと思う:

template: '<a [routerLink]="[ '../Data' ]">Show Me Data</a>' 

か、ルートコンポーネントのルートである場合:返信用

template: '<a [routerLink]="[ '/Data' ]">Show Me Data</a>' 
+0

感謝。私は両方を試みましたが、どちらもうまくいかないようです。/Dataは正しいURLにナビゲートしますが、コンポーネントはロードされません。 ../Dataはこの例外をスローします:Link "[" ../Data "]"は "../"セグメントが多すぎます。 – amuramoto

+0

'[ROUTER_PROVIDERS] 'はルートコンポーネント' AppComponent'では 'bootstrap' **または**に追加されるべきですが、他のコンポーネントでは** never **と追加されるべきです。 –

+0

あなたのコードには他の問題がありました。 'template'の代わりに' templateUrl'を使います(コピー&ペーストの問題でしょう)。 'left-nav'のテンプレートのまわりの' ''は '' data''の周りの '' 'と衝突します。私はアウターをバックティックに変更しました(たぶんコピーペーストの問題でもあります)。 [** Working Plunker **](https://plnkr.co/edit/9ljkpB?p=preview) –

関連する問題