2016-03-16 13 views
9

Zastanawiam się, w jaki sposób mogę przekazać parametry, które nie będą widoczne w adresie URL?Jak przekazywać parametry między stanami spoza adresu URL?

Jak teraz mam:

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

I kiedy przejść do tego widoku tak:

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

userId pojawi się w adresie URL.

Jak ustawić, aby nie było widoczne w adresie URL?

Dzięki

+0

dlaczego nie można po prostu zmienić go na jakimś nieodgadnionym formie? – micronyks

+0

Praktycznie mógłbym to zrobić - ale zastanawiam się, czy nie ma opcji, aby go w ogóle nie wyświetlać :) –

+0

Nawet ja się z tym zastanawiam :-) – micronyks

Odpowiedz

5

Dobre pytanie!

Nie wiem dokładnie, jak to zrobić, ale tak, wiem, że na przemian tego samego, więc wysyłanie wiadomości może pomóc komuś.

Zasadniczo istnieją dwie opcje (do mojej wiedzy) do wysyłania danych przez routing

  • RouteParams (używane w pytaniu)
  • danych (właściwość w momencie routing)

RouteParams

Teraz, gdy wysyłamy dane za pomocą RouteParams, musimy zdefiniować w sposób podobny do tego:

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

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

Stosując tę ​​metodę możemy przesłać dane normalnie ale wszystkie dane są widoczne w adresie URL

danych

gdy nie chcemy, aby pokazać dane w ścieżce URL niż mamy do przesyłania danych za pośrednictwem routingu przy użyciu właściwości data obiektu @RouteConfig annotation dostarczonej przez angualr2. za pomocą tej właściwości możemy wysyłać dodatkowe dane do komponentów w czasie konfiguracji trasy bez pokazywania jej w adresie URL. Oto przykład tej właściwości.

@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')); 
    } 
} 

za pomocą tego możemy wysyłać dane przez routing bez wyświetlania w adresie URL. przykład robocza sama: http://plnkr.co/edit/N5IzUH0pc3nN1O7iQZkD?p=preview]

uzyskać więcej informacji na ten odczytał awesome article

+1

Czy możesz pokazać mi przykład, czy mogę dynamicznie ustawiać dane, które chcę przekazać do trasy? –

+0

'RouteData' nie jest przeznaczone do przekazywania dynamicznych danych do trasy. Użyj do tego 'RouteParams'. –

+0

Zobacz także https://github.com/angular/angular/issues/9757#issuecomment-229847781 na temat używania danych w routerze RC.4 –

Powiązane problemy