2016-09-28 17 views
5

Tôi muốn đạt được một cái gì đó như thế này /products cho thấy tất cả các sản phẩm và /products/:category hiển thị tất cả các sản phẩm liên quan đến một danh mục cụ thể. Để đạt được điều đó tôi có các tuyến đường sau:Các tuyến khác nhau cùng một thành phần

const productsRoutes: Routes = [ 
    { 
    path: 'products', 
    component: ProductsComponent, 
    children: [ 
     { 
     path: '', 
     component: ProductsListComponent, 
     }, 
     { 
     path: ':category', 
     component: ProductsListComponent 
     } 
    ] 
    } 
]; 

Vấn đề

Khi tôi chuyển đổi giữa các loại, mọi thứ đều tốt, khi tôi chuyển đổi giữa tất cả các sản phẩm và các sản phẩm thể loại, và ngược lại, redraws kiễu góc các thành phần và có một nhấp nháy.

Phiên bản cuối cùng của Bộ định tuyến góc 2 không có Regex, như tôi biết. Có cái gì mà tôi đang thiếu, hoặc bây giờ đây là giải pháp duy nhất?

+0

Đối với trường hợp này, điều gần gũi nhất tôi đã có thể tìm thấy là ai ở đây: http://stackoverflow.com/questions/41899090/angular2-route-redirect-can -i-use-redirectto-to-parameter-path Có loại kịch bản tương tự tại đây: http://stackoverflow.com/a/41931088/2911817 –

Trả lời

4

Tôi không biết có cách nào khác để thực hiện việc này hay không nhưng tôi đã cố gắng làm cho nó hoạt động bằng cách sử dụng bản hack sau.

export const productsRoutes: Route[] = [ 
    { 
     path: 'products', 
     component: ProductsComponent, 
     children: [ 
      { 
       path: '', 
       pathMatch: 'prefix', 
       component: ProductsListComponent, 
       children: [ 
        { 
         path: '', 
         component: EmptyComponent, 
        }, 
        { 
         path: ':category', 
         component: EmptyComponent, 
        }, 
       ], 
      }, 
     ], 
    }, 
]; 

EmptyComponent:

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'GemainEmpty', 
    template: '<router-outlet></router-outlet>', 
}) 
export class EmptyComponent { 
} 

tuyến đường Xử lý những thay đổi trên ListComponent:

ngOnInit() { 
    this.routerEventsSubscription = this.router.events.subscribe((evt) => { 
     if (!(evt instanceof NavigationEnd)) { 
      return; 
     } 
     //Code to reload/filter list 
    } 
} 

Và thêm một ổ cắm bộ định tuyến trên mẫu ListComponent.

0

Bạn cũng có thể xác định được chuyển hướng sang một con đường cụ thể:

{ path: '**', redirectTo: '/home', pathMatch: 'full' }, 

nơi /home là con đường bạn muốn chuyển hướng đến.

path: '**' giải quyết tất cả những con đường mà không được định nghĩa

0

bạn có thể giải quyết nó bằng cách thêm các tuyến đường

const routes: Routes = [ 
    { path: 'experience', 
     children: [ 
      { path: 'pending', component: ExperienceComponent }, 
      { path: 'requests', component: ExperienceComponent }, 
     ] }] 

và trong ExperienceComponent nhập khẩu

import { ActivatedRoute } from "@angular/router"; 

và trong constructor thêm tham số này

constructor(public route: ActivatedRoute) 

và bên trong constructor get url

this.route.url.subscribe(params => { 
    console.log(params[0].path); 
}) 
Các vấn đề liên quan