Кажется, Angular не может правильно проанализировать URL с двойной строкой sh, поэтому отображение пути маршрутизации не будет работать. Вы можете реализовать свой собственный UrlSerializer
вместо использования по умолчанию DefaultUrlSerializer
. Попробуйте преобразовать путь "/ base // child / 1" в "/base/child/1".
import {UrlSerializer, UrlTree, DefaultUrlSerializer} from '@angular/router';
export class CustomUrlSerializer implements UrlSerializer {
parse(url: any): UrlTree {
let dus = new DefaultUrlSerializer();
console.log(url);
if(/\/\//.test(url)) {
url = url.replace(/\/\//, '/');
}
return dus.parse(url);
}
serialize(tree: UrlTree): any {
let dus = new DefaultUrlSerializer(),
path = dus.serialize(tree);
return path;
}
}
Зарегистрируйте его в app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { RouterModule, UrlSerializer } from '@angular/router';
import { CatchAllComponent } from './catch-all/catch-all.component';
import { InformedComponent } from './informed/informed.component';
import { CustomUrlSerializer } from './custom-url-serializer';
@NgModule({
imports: [
BrowserModule,
FormsModule,
RouterModule.forRoot([{
path: 'base/child/:id',
component: InformedComponent,
}, {
path: 'base/:parentId/child/:id',
component: InformedComponent
}, {
path: '**',
component: CatchAllComponent
}])
],
declarations: [ AppComponent, CatchAllComponent, InformedComponent ],
providers: [
{ provide: UrlSerializer, useClass: CustomUrlSerializer }
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Сейчас URL с двойным sla * sh "//" будет преобразован в "/". Он будет соответствовать пути маршрутизации "base / child /: id", поэтому вы можете получить параметры и обработать их.