2017-02-17 28 views
6

Có thể trong Angular 2 để xác định định tuyến dựa trên tham số truy vấn không? Tôi muốn có hành vi sau:Góc 2 Định tuyến dựa trên tham số truy vấn

Nếu người dùng nhập url http:<server-path>/search Tôi muốn chuyển đến thành phần StartPage.

Nếu người dùng nhập url http:<server-path>/search?query=sometext Tôi muốn định tuyến đến thành phần ResultList.

Tôi biết rằng có thể sử dụng các thông số đường dẫn để định tuyến nhưng đây không phải là những gì tôi muốn làm. Tôi muốn sử dụng thông số truy vấn nếu có thể. Tôi biết cách kích hoạt điều hướng theo góc với tham số truy vấn nhưng tôi không biết cách định cấu hình Tuyến đường.

Trả lời

7

Vì vậy, bạn không thể xác định path bằng chuỗi truy vấn trong đó nhưng bạn có thể sử dụng tuyến đường matcher thay vào đó và xác định thời điểm tuyến đường đến thành phần ResultList. Bạn xác định điều này ở trên định nghĩa tuyến đường mặc định cho search để nếu khớp không thành công, nó sẽ mặc định theo tuyến tìm kiếm không có chuỗi truy vấn.

{ 
    component: ResultListComponent, 
    matcher: (url: UrlSegment[]) => { 
     console.log(url); 
     return url.length === 1 && url[0].path.indexOf('search?query=') > -1 ? ({consumed: url}) : null; 
    } 
}, 
{ 
    path: 'search', 
    component: SearchComponent, 
} 

Demo

+0

Trong ví dụ của bạn, bạn thực sự không sử dụng qu ery params nhưng bao gồm "query = example" vào đường dẫn. Url thực tế sau khi mã hóa là '/ search% 3Fquery% 3Dexample' thay vì'/search? Query = example'. Do đó, câu trả lời của bạn không trả lời câu hỏi gốc. – kimamula

0

Bạn cũng có thể thiết lập một cái gì đó như thế này:

Tuyến đường:

{ path: 'server-path/:id', component: ResultListComponent }, 
{ path: 'server-path', component: serverPathComponent }, 

ResultListComponent

queryParam: string; 
    ngOnInit() {  
      this.route.params.forEach((params: Params) => { 
       this.queryParam = params['id']; 

      }); 
     } 

Bạn có thể gọi bất kỳ chức năng hoặc bất cứ điều gì mà bạn cần làm bằng cách sử dụng truy vấn đóParam.

Thông tin thêm về params truy vấn có thể được tìm thấy tại Routing & Navigation guide

+1

Đây chính xác là những gì tôi đang tìm kiếm. Không chắc chắn lý do tại sao một Người dùng bỏ phiếu cho câu trả lời này, nó liên quan đến các tham số truy vấn nhưng không phải trong ngữ cảnh của áp phích gốc. Bất kể, cảm ơn. –

1

Trong đoạn mã dưới đây tôi sẽ làm thế nào để vượt qua các thông số chuỗi truy vấn trên bất kỳ tuyến đường.

giả sử chúng ta muốn có url dưới đây:

http://localhost:4200/myUrl?QueryParamEx=2258 

Trong constructor của bạn tiêm phụ thuộc ROUTER

constructor(...private router: Router..){...} 

Chức năng điều hướng sẽ cho phép chúng tôi hướng đến url trước

goMyUrl() { 
    this.router.navigate(['/myUrl'], { queryParams: { QueryParamEx: '2258' } }); 
} 
Các vấn đề liên quan