Mein Ansatz wäre, Umleitung manuell zu behandeln, wenn ich die Routen-Konfiguration nicht zum Funktionieren bringen kann. Habe eine RedirectService
mit einer redirectInFlight()
Methode, die auf die Router.events
Observable hört. Wenn der Router auf einen Zielpfad zu gehen versucht, wie /sso/ip/:id
, transparent auf dem richtigen Weg umleiten: /ip/:id
Ich würde den Dienst zu AppModule.providers
fügen Sie dann, spritzen den Dienst in AppComponent
und redirectInFlight()
AppComponent nennen
@Component({
templateUrl: 'app.component.html'
})
export class AppComponent implements OnInit {
//inject the RedirectService
constructor(private redirectSvc:RedirectService){}
//start listening to the router and redirecting
ngOnInit() {this.redirectSvc.redirectInFlight();}
}
RedirectService
import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
import 'rxjs/Rx'; //replace with just the classes you need from RxJS library
@Injectable()
export class RedirectService {
events$:Observable<any>; //stream of Router events
constructor(private router:Router) {
this.events$ =
//listen to router events and inspect the `url` string property
//and filter for urls that begin with /sso
this.router.events.filter(e=> e.url && e.url.startsWith('/sso'))
}
redirectInFlight(){
//First remove /sso from the start of url to fix it
this.events$.map(e => e.url.replace('/sso',''))
//navigate to the fixed URL
.subscribe(newUrl=>this.router.navigateByUrl(newUrl));
}
}
Schließlich können Sie den gesamten sso
Pfad und seine untergeordneten Pfade von Ihrer Router-Konfiguration entfernen und es sehr vereinfachen.
Live demo
Hinweis: Diese Implementierung ist ein Ausgangspunkt. Sie können es robuster machen, indem Sie eine Karte von Umleitungen speichern und darauf verweisen, anstatt "/ sso" zu codieren.
Können Sie den Code anzeigen, den Sie verwenden, um auf diese Route umzuleiten? – DeborahK
@DeborahK Ich denke, es ist alles in Route-Konfigurationen. Wenn der Benutzer zu '/ sso/ip /: id' geht, möchte OP zu'/ip /: id' umleiten, wobei er denselben Wert für ': id' benutzt, der für den ursprünglichen Pfad bereitgestellt wurde. Es sieht jedoch so aus, als ob der Router nach der literalen Route '/ ip /: id' sucht (ohne den ID-Wert zu ersetzen), eine Route, die nicht existiert, da': id' nur ein Parameter – BeetleJuice
ist eine routerLink- oder .navigate() -Methode, die dies tut. Ich hatte gehofft, diesen Code zu sehen, um zu sehen, wie dieser Prozess gemacht wurde. Oder vielleicht missverstanden ... gibt der Benutzer den Pfad in die Adressleiste ein? – DeborahK