2017-07-20 16 views
13

Jak opisano w podręczniku router.navigate przyjmuje delta, ale instrukcja, ale nie jest na tyle, że konkretne na:kątowe router.navigate() delta

Przejdź na podstawie dostarczonych tablicy poleceń i uruchamiania punkt. Jeśli nie podano trasy początkowej, nawigacja jest absolutna.

...

W przeciwieństwie do navigateByUrl przejdź zawsze bierze deltę, która jest stosowana do aktualnego adresu URL.

Czy stosuje się tylko względny adres URL lub coś bardziej złożonego? Jakiego rodzaju delta odnosi się w przypadku nawigacji absolutnej?

+0

Co to jest delta? Właśnie znalazłem jedno miejsce dla "delta" w kątowych dokumentach, jest to jedna część dla RouterLink API Doc strona: > Dyrektywa routera zawsze traktuje dostarczone wejście jako delta do bieżącego adresu URL. > Na przykład, jeśli aktualny adres URL to/user/(box // aux: team). > Następnie poniższy link Jim wygeneruje link/użytkownik/(jim // aux: zespół). Zobacz createUrlTree, aby uzyskać więcej informacji. '' ' – Hayden

Odpowiedz

7

Czy to wystarczy zastosować względny adres URL lub coś bardziej skomplikowanego?

Jest to względny adres URL zbudowany z kawałków możesz dostarczyć poprzez commands param i biorąc pod uwagę dodatkowe parametry, które przechodzą w extras (The NavigationExtras object).

Na przykład można użyć relativeTo do nawigacji z aktywnej trasy lub z trasy głównej. Możesz ustawić parametry zapytania lub fragment dla adresu URL, do którego nawigujesz (queryParams i fragment w dodatkach) lub zachować parametry zapytań, które są obecne w bieżącym adresie URL (queryParamsHandling w dodatkach).

Tak więc, ogólnie rzecz biorąc, jest to coś bardziej skomplikowanego niż nawigacja po adresie URL, ponieważ dynamicznie budujemy URL.

Jakiego rodzaju delta dotyczy w przypadku nawigacji absolutnej?

To samo względnej i absolutnej nawigacji - Delta jest zestaw zmian (commands) stosuje się do aktualnej trasy (względnej) lub na trasie głównej (absolutny) przenoszą zgłoszenie do nowego stanu (a po prostu podając nowy adres URL za pośrednictwem navigateByUrl).

W prostym przypadku, jeśli coś zrobić jak this.router.navigate(['/heroes']) to faktycznie nie jest bardzo różni się od korzystania z navigateByUrl, ale następujące przykłady (patrz createUrlTree które faktycznie zamienia commands i extras do końcowego URL):

// create /team/33/(user/11//right:chat) 
router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]); 

// remove the right secondary node 
router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]); 

Tak więc nawet dla absolutnej nawigacji, metoda navigate zapewnia zestaw dodatkowych narzędzi do dynamicznego budowania adresu URL. Możesz to zrobić z navigateByUrl, ale prawdopodobnie przeanalizujesz/skoncentrujesz się/wykonasz inne manipulacje za pomocą łańcuchów (lub opracujesz własne narzędzie podobne do tego, co zapewnisz dla siebie navigate i createUrlTree).

2

w trybie względnym, delta jest stosowana do bieżącej trasy. To natywnie wzywa navigateByUrl przy użyciu tego kodu

/** 
    * Navigate based on the provided array of commands and a starting point. 
    * If no starting route is provided, the navigation is absolute. 
    * 
    * Returns a promise that: 
    * - resolves to 'true' when navigation succeeds, 
    * - resolves to 'false' when navigation fails, 
    * - is rejected when an error happens. 
    * 
    * ### Usage 
    * 
    * ``` 
    * router.navigate(['team', 33, 'user', 11], {relativeTo: route}); 
    * 
    * // Navigate without updating the URL 
    * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true}); 
    * ``` 
    * 
    * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current 
    * URL. 
    */ 
    navigate(commands: any[], extras: NavigationExtras = {skipLocationChange: false}): 
     Promise<boolean> { 
    validateCommands(commands); 
    return this.navigateByUrl(this.createUrlTree(commands, extras), extras); 
    } 

wiele przykładów są zawarte w kodzie źródłowym https://github.com/angular/angular/blob/master/packages/router/src/router.ts

+0

Pytanie brzmi * Czy po prostu stosuje względny adres URL lub coś bardziej złożonego? Jakiego rodzaju delta odnosi się w przypadku nawigacji bezwzględnej? *. Nie jest jasne, co i na czym polega ta delta. Jeśli jest to ścieżka względna, prawdopodobnie powiedzieliby "ścieżkę względną". Nie dałbym nagrody za coś, co można łatwo zrozumieć z oficjalnych dokumentów. – estus