2016-11-03 3 views
7

ich meine App eingerichtet haben, so dass ich eine Recipe Book haben, die eine Liste von Recipies hat, die, wenn ich auf einem Rezept klicken Sie dann auf die Recipe Details in einer verschachtelten Route zeigt. Dies hat dann auch eine Schaltfläche, die beim Anklicken die Zutaten in einer verschachtelten Route innerhalb der Recipes Details lädt.Angular 2 Wurffehler: Outlet ist nicht aktiviert

Bis jetzt scheint das Routing zu funktionieren, außer wenn ich versuche, zu einem anderen Recipe zu navigieren. Wenn das Ingredients Fach (Strecke) aktiv ist, dann wird es Rezept ändern und die Ingredients Strecke zusammenbrechen, wenn ich dann versuchen, und navigieren (ohne die Zutaten zu öffnen) ich die folgende Fehlermeldung erhalten:

Uncaught (in promise): Error: Outlet is not activated 
Error: Outlet is not activated 

Es ist wie ich sieht den Der Router benötigt Ingredients, um aktiv zu sein, oder er versteht die verschachtelte Route nicht. Das ist meine Meinung, aber ich bin mir nicht sicher, wie ich es beheben soll oder wann ich falsch gelaufen bin.

Single-Rezept-Buch-page.component.html

<app-tray class="recipe-list"> 
    <app-recipe-list [recipe]="recipe"></app-recipe-list> 
</app-tray> 
<router-outlet></router-outlet> 

Rezept-detail.component.html

<app-tray class="recipe"> 
    The routing has worked and loaded recipe. 
</app-tray> 
<router-outlet></router-outlet> 

Zutaten-list.component.html

<app-tray class="ingredients-list"> 
    Recipe Ingredients have loaded. 
</app-tray> 

app.routes.ts (aktualisiert)

export const routerConfig : Route[] = [ 
    { 
    path: 'recipe-books', 
    children: [ 
     { 
     path: ':id', component: SingleRecipeBookPageComponent, 
     children: [ 
      { 
      path: 'recipes', 
      children: [ 
       { path: ':id', component: RecipeDetailComponent, 
       children: [ 
        { path: '', component: IngredientsListComponent }, 
        { path: 'ingredients', component: IngredientsListComponent } 
       ] 
       }, 
       { path: 'new', component: IngredientsListComponent }, 
       { path: '', component: RecipeDetailComponent } 
      ] 
      }, 
      { path: '', redirectTo: 'recipes', pathMatch: 'full' } 
     ] 
     }, 
     { path: '', component: RecipeBooksPageComponent } 
    ] 
    }, 
    { path: 'ingredients', component: IngredientsComponent }, 
    { path: '', redirectTo: 'recipe-books', pathMatch: 'full' }, 
    { path: '**', redirectTo: 'recipe-books', pathMatch: 'full' } 
]; 
+0

Was sollen diese Routen tun? –

+0

Sie haben die 'pathMatch: 'full'-Methode nicht zu 2 leeren Pfad-Child-Routen hinzugefügt. Kannst du in einem Plunker reproduzieren? –

+0

Auch wenn sie eine Komponente haben, sollte ich noch 'pathMatch: full' hinzufügen? – Daimz

Antwort

8

Diese Route ist ungültig, und Sie sollten einen Fehler für sie.

{ path: '' }, 

Eine Route muss entweder ein component haben, ein redirectTo oder children.

Wenn eine leere Pfadroute keine Kinder hat, sollte sie auch pathMatch: 'full' haben.

denke ich, was Sie wollen, ist

{ path: '', component: DummyComponent, pathMatch: 'full' }, 

Wo DummyComponent eine Komponente mit einer leeren Ansicht ist. Sie können dieselben DummyComponent für alle diese Pfade wiederverwenden.

+1

Danke für die Klarheit, ich habe das Internet ausgiebig um dieses Thema durchsucht und bisher einen wichtigen Punkt verpasst, in Tutorials, die ich befolgt habe, benutzen sie '{path: '}}, also war es währenddessen sehr verwirrend Versuche zu lernen. – Daimz

+0

Können Sie alle Probleme lösen oder funktioniert noch immer etwas nicht wie erwartet? –

+0

Mein Code oben mit neuem Routing aktualisiert. Ich kann jetzt navigieren zwischen 'Rezeptbücher> Einzelrezept> Zutaten' kein Auslauffehler.Aber jetzt, wenn ich das "Rezept 1" besuche, werden die Zutaten nicht angezeigt (Dies ist korrekt, es sollte nur angezeigt werden, wenn ich auf die Schaltfläche Zutaten klicke und es geht zu "Rezeptbücher/1/Rezept/1/Notizen"), wenn ich klicke Der Knopf, den die Zutaten zeigen. Perfekt! Dann klicke ich auf das "Rezept 2" (die Zutaten sind noch aktiv). Ich bekomme "Rezept 2", aber mit "Rezept 1" Zutaten. Wenn ich auf den Zutaten-Knopf klicke, lade jetzt 'Rezept 2s' ein. Irgendwelche Ideen, wo ich falsch liegen könnte? – Daimz

Verwandte Themen