2016-11-03 28 views
7

Tôi đã thiết lập ứng dụng của mình để có Recipe Book có danh sách Recipies khi tôi nhấp vào Công thức, sau đó hiển thị Recipe Details trong tuyến đường lồng nhau. Điều này sau đó cũng có một nút mà khi nhấp vào tải các thành phần trong một con đường lồng nhau bên trong Recipes Details.Lỗi ném góc 2: Ổ cắm không được kích hoạt

Cho đến nay định tuyến có vẻ hoạt động, ngoại trừ khi tôi cố điều hướng đến một Recipe khác. Nếu Ingredients khay (đường) đang hoạt động thì nó sẽ thay đổi công thức hoặc thu nhỏ Ingredients Route, nếu tôi sau đó cố gắng và điều hướng (mà không cần mở Ingredients) tôi nhận được lỗi sau:

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

Dường như tôi các router cần Ingredients để hoạt động hoặc người nào khác không hiểu được tuyến đường lồng nhau. Thats của tôi về nó nhưng không chắc chắn làm thế nào để sửa chữa nó hoặc khi tôi đã đi sai.

đơn thức-book-page.component.html

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

recipe-detail.component.html

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

thành phần-list.component.html

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

app.routes.ts (cập nhật)

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

Các tuyến đường này phải làm gì? –

+0

Bạn không thêm 'pathMatch: 'full'' vào 2 tuyến con đường dẫn trống. Bạn có thể sao chép trong một Plunker? –

+0

Thậm chí nếu họ có một thành phần tôi vẫn nên thêm 'pathMatch: full'? – Daimz

Trả lời

8

Tuyến đường này là không hợp lệ và bạn sẽ nhận được một lỗi cho nó.

{ path: '' }, 

Một tuyến đường hoặc cần phải có một component, một redirectTo, hoặc children.

Nếu tuyến đường dẫn trống không có con thì cũng cần có pathMatch: 'full'.

Tôi đoán những gì bạn muốn là

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

đâu DummyComponent là một thành phần với một cái nhìn trống rỗng. Bạn có thể sử dụng lại cùng một DummyComponent cho tất cả các đường dẫn này.

+1

Cảm ơn vì sự rõ ràng, tôi đã tìm kiếm trên mạng Internet xung quanh vấn đề này và cho đến nay đã bỏ lỡ một điểm quan trọng, trong các hướng dẫn mà tôi đã theo dõi, họ sử dụng '{path: ''}' nên nó rất khó hiểu cố gắng học. – Daimz

+0

Bạn có thể giải quyết tất cả các vấn đề hoặc vẫn còn một cái gì đó không hoạt động như mong đợi? –

+0

Cập nhật mã của tôi ở trên với định tuyến mới. Bây giờ tôi có thể điều hướng giữa 'Công thức sách> Công thức đơn> Thành phần' không có lỗi ổ cắm.Nhưng bây giờ nếu tôi truy cập vào 'Recipe 1', Thành phần không hiển thị (Điều này đúng khi nó chỉ hiển thị khi tôi nhấp vào nút thành phần và nó đi đến' recipe-books/1/recipe/1/notes') nếu tôi nhấp nút thành phần hiển thị. Hoàn hảo! Sau đó, tôi nhấp vào 'Recipe 2' (thành phần vẫn còn hoạt động) Tôi nhận được' Recipe 2' nhưng với 'Recipe 1' Ingredients. Nếu tôi nhấp vào nút Thành phần ngay bây giờ, thành phần 'Công thức 2s' sẽ tải. Bất kỳ ý tưởng mà tôi có thể đi sai? – Daimz

Các vấn đề liên quan