2016-11-03 12 views
7

Skonfigurowałem swoją aplikację, aby mieć Recipe Book z listą Recipies, która po kliknięciu na recepturze pokazuje Recipe Details w zagnieżdżonej trasie. To ma również przycisk, który po kliknięciu ładuje składniki w zagnieżdżonej trasie wewnątrz Recipes Details.Błąd rzucania kątowego 2: Wyjście nie jest aktywne

Do tej pory routing wydaje się działać, z wyjątkiem sytuacji, gdy próbuję przejść do innego Recipe. Jeśli taca Ingredients (trasa) jest aktywny wtedy będzie zmienić przepis i zwinąć Ingredients trasa, jeśli I spróbuj i nawigacja (bez otwierania składników) pojawia się następujący błąd:

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

to wygląda I do router potrzebuje Ingredients, aby być aktywnym lub nie rozumie zagnieżdżonej trasy. To jest moje podejście, ale nie wiem, jak to naprawić lub gdy popełniłem błąd.

single-recepta-book-page.component.html

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

przepis-detail.component.html

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

składniki-list.component.html

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

app.routes.ts (aktualizacja)

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

Co mają robić te trasy? –

+0

Nie dodałeś ścieżki 'pathMatch: 'full'' do 2 pustych ścieżek potomnych ścieżki. Czy możesz rozmnażać się w Plunker? –

+0

Nawet jeśli mają komponent, powinienem jeszcze dodać 'pathMatch: full'? – Daimz

Odpowiedz

8

Trasa ta jest nieważna i należy się błąd za nim.

{ path: '' }, 

Trasa albo musi mieć component, A redirectTo lub children.

Jeśli pusta ścieżka nie ma dzieci, powinna również mieć pathMatch: 'full'.

Chyba to, co chcesz

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

Gdzie DummyComponent jest elementem pustym widzenia. Możesz użyć tego samego DummyComponent dla wszystkich tych ścieżek.

+1

Dziękuję za jasność, wyszperałem w Internecie całą sprawę i do tej pory przegapiłem ten jeden ważny punkt, zapoznałem się z tutorialami, które śledziłem, używają one słowa "{path: ''}", więc było to bardzo mylące, podczas gdy próbujący się uczyć. – Daimz

+0

Czy możesz rozwiązać wszystkie problemy lub czy nadal coś nie działa zgodnie z oczekiwaniami? –

+0

Zaktualizowałem powyższy kod o nowe trasy. Mogę teraz nawigować między 'Recepturami> Pojedynczy przepis> Ingredients' no outlet error.Ale teraz, jeśli odwiedzę 'Recepturę 1', Składniki nie są pokazane (To jest poprawne, powinno się pokazywać tylko wtedy, gdy kliknę przycisk Składniki i przejdzie do' Receptur/1/Recepta/1/Notatek') jeśli kliknę przycisk pokazujący składniki. Idealny! Następnie klikam na "Recepturę 2" (składniki wciąż aktywne) Otrzymuję "Recepturę 2", ale z "Recepturą 1" Składnikami. Jeśli kliknę przycisk Składniki teraz ładuję składniki receptury 2s. Jakieś pomysły, w których mógłbym pójść źle? – Daimz

Powiązane problemy