2017-02-14 11 views
3

現在、複数のナビゲーションレベルを持つ角度2のアプリケーションを実装しようとしています。 問題は、ルートから親コンポーネントに明示的に宣言されていないときに、子コンポーネントがルーターのコンセントを見つけることができないことです。親ルーターのアウトレットに角2の子コンポーネントがあります

Unhandled Promise rejection: Cannot find primary outlet to load 'EditUserComponent' 

私はボタンやリンクをクリックすると、代わりに、リストビューの示し編集または詳細ビューのような何かをしたい:

これは私が取得エラーメッセージです。 ビューはナビゲーション構造を持ち、コンテンツのルーターアウトレットを提供するテンプレートレイアウトに埋め込まれています。私はまた、私のすべてのビューでこのルータのアウトレットをターゲットにしたい。名前付き店舗を使ってみましたが、成功しませんでした。 現在のルートを表示するためにパンくずリストコンポーネントを使用しています。したがって、編集/詳細ビューをリストコンポーネントの兄弟にすることはできません。

https://embed.plnkr.co/XXxADnS7q8FCfF4W84tS/

がどのように私は出口の問題を解決し、子コンポーネントからレイアウトのルータ・コンセントをターゲットにすることができます:

はそれをより明確にするために、私はplunkerデモを作ったのですか?

+0

あなたはまさに私が直面してる問題だこと:) –

答えて

1

テンプレートのすべてを、router outletdiv)以外の単純なものにすることができます。コンポーネントに子供がある場合(この場合はUsersEditComponent)、それに応じてdivを非表示にします。

これは、ルータがUsersComponentUsersEditComponentの間に正しい親/子階層を維持することを可能にしますが、そのルートがアクティブになったときにはまだUsersEditComponentのコンテンツしか表示しません。

これはまさにそのUsersComponentの実装は次のとおりです。

import { Component, OnInit } from '@angular/core'; 
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router'; 

@Component({ 
    template: 
    `<div *ngIf="!hasChildren"> 
    User 1 <button md-icon-button (click)="editUser(1)">edit</button><br/> 
    User 2 <button md-icon-button (click)="editUser(2)">edit</button> 
    </div> 
    <router-outlet></router-outlet> 
    ` 
}) 

export class UsersComponent implements OnInit { 
    private hasChildren: bool; 
    constructor(private router: Router, private route:ActivatedRoute) { } 

    editUser(id) { 
    this.router.navigate(['users/edit', id]); 
    } 

    ngOnInit() { 
    this.hasChildren = false; 
    this.router.events.filter(event => event instanceof NavigationEnd).subscribe(event => { 
     this.hasChildren = this.route.children.length > 0; 
    } 
    } 
} 
+1

を手助けしようとしたときに多くのことができますplunkrを、追加したことを非常に素晴らしいです。そこにルータのアウトレットを追加すると機能しますが、編集フォームの上にリストも表示されます。リストを置き換える私の編集フォームが欲しい。 – kaischo

+0

@kaischo - 申し訳ありませんが、誤解されています。私の答えを更新しました! –

+0

助けてくれてありがとうございますが、これはプランカの例には含まれていないが、私の質問の投稿に説明されていない別の問題を引き起こします:ルートにも依存している私のブレッドクラムはもはや動作しません。これは次のように表示されます:ホーム - >ユーザーと私が編集をクリックすると、それが表示されます:ホーム - >編集が必要です:ホーム - >ユーザー - >編集 – kaischo

関連する問題