7

Chcę wyświetlić/ukryć routerLink s na podstawie niektórych Data z routera. Dyrektywa jest zrobione, ale brakuje mi najbardziej istotną część ...Router Angular2: Uzyskaj trasę do adresu URL bez nawigacji

Na przykład mam następujące config routera (pominięty części):

[ 
    { path: '', children: [ 
    { path: 'foo', children: [ 
     { path: 'bar', data: { requiredPermissions: ['a', 'b'] } } 
    ]} 
    ]}, 
    { path: 'baz', data: { requiredPermissions: ['c'] }, children: [ 
    { path: ':id' } 
    ]} 
] 

Teraz chciałbym zapytać Router dla Route, który byłby używany, jeśli routerLink jest /foo/bar lub /baz/123.

Wyglądałem jednak na kod źródłowy Router (https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts), ale nie mogłem znaleźć łatwego sposobu na zrobienie tego. Szczególnie, jak radzi sobie z tymi zmiennymi :id.

Oczywiście mogłem powtórzyć nad Router.config, coraz głębiej. Ale potem musiałbym parsować te zmienne, wyrażenia regularne itp. Musi być łatwiejszy sposób, ponieważ kątowy router musi wewnętrznie robić wszystkie te rzeczy.

Masz jakiś pomysł/rozwiązanie?

+0

Di chcesz dane z aktualnej trasy? –

Odpowiedz

0

Kod, którego potrzebujesz jest tutaj: router/src/recognize.ts, ale jest to prywatne API, które ma dużo prywatnego importu, więc bardzo trudno będzie go uruchomić w Twojej aplikacji.

Zamiast tego można zwolnić router.navigateByUrl, odczekać na zdarzenie RouteRecognized i anulować nawigację (na przykład przy użyciu opcji Custom Guard). RouteRecognized będzie zawierał wszystkie niezbędne informacje. Oczywiście jest to złe rozwiązanie.

Istnieje inne podejście, można utworzyć dodatkową strukturę (mapę rodzajową), która powinna zawierać ścieżkę + dane. Na przykład struktura ma ścieżkę struct.baz-route={url:'baz/:id', perm: ['c']}, następnie [routerLink]="struct.baz-route.url.replace(':id', x)", a następnie *ngIf="struct.baz-url.perm.indexOf('c')>-1".

-1

hej jeśli chcesz dane z aktualnej trasy niż można zrobić tak, aby ta

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

export class Component { 

    constructor(private route: ActivatedRoute){ 
      let pathroots = this.route.pathFromRoot; 
      let pathurl = ''; 
      pathroots.forEach(path => { 

       path.url.subscribe(url => { 
        url.forEach(e => { 
         pathurl += e + '/'; 
        }); 
       }); 


     }); 
     console.log(pathurl,'*******************'); 
     } 

}