2016-03-16 19 views
9

Tôi tự hỏi làm thế nào tôi có thể vượt qua các tham số, mà sẽ không được hiển thị trong URL?Làm cách nào để chuyển tham số giữa các trạng thái không có trong url?

Tính đến bây giờ tôi có:

{path: '/editUser/:userId', name: 'Edit User', component: UserEditComponent} 

Và khi tôi hướng đến quan điểm này như thế:

<a href="#" [routerLink]="['Edit User',{userId: id}]" 

Các userId sẽ hiển thị trong URL.

Tôi làm cách nào để đặt nó để URL không hiển thị trong URL?

Cảm ơn

+0

tại sao bạn không chỉ cần thay đổi nó để một số hình thức không thể đọc được? – micronyks

+0

Thực tế tôi có thể làm điều đó - nhưng tôi tự hỏi nếu có một tùy chọn không hiển thị nó ở tất cả :) –

+0

Thậm chí tôi tự hỏi với nó :-) – micronyks

Trả lời

5

Câu hỏi hay!

Tôi không biết chính xác làm thế nào để làm điều đó nhưng có tôi biết thay thế giống nhau để đăng bài là câu trả lời có thể giúp đỡ ai đó.

Về cơ bản có hai lựa chọn (lên đến kiến ​​thức của tôi) để gửi dữ liệu thông qua định tuyến

  • RouteParams (như được sử dụng trong câu hỏi)
  • dữ liệu (tài sản tại thời điểm định tuyến)

RouteParams

Bây giờ khi chúng tôi gửi dữ liệu bằng cách sử dụng RouteParams, chúng tôi phải xác định theo cách tương tự như sau:

{path: '/editUser/:userId', name: 'Edit User', component: UserEditComponent} 

<a href="#" [routerLink]="['Edit User',{userId: id}]" 

Bằng cách sử dụng phương pháp này, chúng tôi gửi dữ liệu normaly nhưng tất cả dữ liệu được hiển thị trong URL

liệu

khi chúng ta không muốn hiển thị dữ liệu trong đường dẫn URL hơn chúng ta phải gửi dữ liệu thông qua định tuyến sử dụng thuộc tính data của @RouteConfig annotation do angualr2 cung cấp. bằng cách sử dụng thuộc tính này, chúng tôi có thể gửi dữ liệu bổ sung cho các thành phần tại thời điểm cấu hình tuyến đường mà không hiển thị nó trong URL. đây là ví dụ về tài sản này.

@RouteConfig([ 
    {path: '/product/:id', component: ProductDetailComponentParam, 
    as: 'ProductDetail', data: {isProd: true}}]) 

export class ProductDetailComponentParam { 
    productID: string; 
    constructor(params: RouteParams, data: RouteData) { 
     this.productID = params.get('id'); 

     console.log('Is this prod environment', data.get('isProd')); 
    } 
} 

bằng cách sử dụng điều này chúng tôi có thể gửi dữ liệu qua định tuyến mà không hiển thị trong URL. dụ làm việc của cùng: http://plnkr.co/edit/N5IzUH0pc3nN1O7iQZkD?p=preview]

để biết thêm đọc này awesome article

+1

Bạn có thể chỉ cho tôi ví dụ về việc tôi có thể đặt dữ liệu động, mà tôi muốn chuyển sang tuyến đường không? –

+0

'RouteData' không được dùng để truyền dữ liệu động tới tuyến đường. Sử dụng 'RouteParams' cho việc này. –

+0

Xem thêm https://github.com/angular/angular/issues/9757#issuecomment-229847781 để sử dụng Dữ liệu trong bộ định tuyến RC.4 –

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