7

Ich möchte routerLink s basierend auf einigen Data vom Router anzeigen/verbergen. Die Richtlinie ist getan, aber ich bin der wesentlichste Teil fehlt ...Angular2 Router: Route für URL ohne Navigation

Zum Beispiel habe ich den folgenden Router config (weggelassen Komponenten):

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

Nun möchte Ich mag die Router fragen für die Route, die verwendet werden würde, wenn die /foo/bar oder /baz/123 ist.

Ich sah zwar den Router Quellcode (https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts), konnte aber keine einfache Möglichkeit finden, dies zu tun. Vor allem, wie es diese :id Variablen behandelt.

Natürlich könnte ich über Router.config iterieren, tiefer und tiefer gehen. Aber dann müsste ich diese Variablen analysieren, reguläre Ausdrücke usw. Es muss einen einfacheren Weg geben, denn der eckige Router muss intern auch all diese Sachen machen.

Haben Sie eine Idee/Lösung?

+0

Di Sie die Daten aus der aktuellen Route wollen? –

Antwort

0

Der Code, den Sie benötigen, ist hier: router/src/recognize.ts, aber es ist private API, die eine Menge von privaten Importen hat, so wird es sehr schwierig sein, es in Ihrer App funktionieren zu lassen.

Stattdessen könnten Sie feuern router.navigateByUrl, warten auf RouteRecognized Ereignis und Navigation abbrechen (zum Beispiel mit benutzerdefinierten Guard). RouteRecognized wird alle notwendigen Informationen haben. Offensichtlich ist es eine schlechte Lösung.

Es gibt einen anderen Ansatz, Sie könnten zusätzliche Struktur (eine Art Karte) erstellen, die Pfad + Daten enthalten sollte. Zum Beispiel hat die Struktur den Pfad struct.baz-route={url:'baz/:id', perm: ['c']}, dann [routerLink]="struct.baz-route.url.replace(':id', x)", dann *ngIf="struct.baz-url.perm.indexOf('c')>-1".

-1

hey, wenn Sie wollen, dass die Daten aus der aktuellen Route als Sie so tun können, um zu bekommen, dass

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

}