Tengo la siguiente configuración de enrutamiento.
@RouteConfig([ { path: '/home', name: 'Homepage', component: HomepageComponent, useAsDefault: true } ) export class AppComponent { } siempre que el navegador apunte a /home esta ruta funciona pero no para /Home o cualquier otra variación de caso. ¿Cómo puedo hacer que el enrutador enrute al componente sin importar el caso?
Gracias
Esto es lo que hice.
import { DefaultUrlSerializer, UrlTree } from '@angular/router'; export class LowerCaseUrlSerializer extends DefaultUrlSerializer { parse(url: string): UrlTree { // Optional Step: Do some stuff with the url if needed. // If you lower it in the optional step // you don't need to use "toLowerCase" // when you pass it down to the next function return super.parse(url.toLowerCase()); } }Y
@NgModule({ imports: [ ... ], declarations: [AppComponent], providers: [ { provide: UrlSerializer, useClass: LowerCaseUrlSerializer } ], bootstrap: [AppComponent] })Una pequeña corrección para la respuesta de Timothy , que no cambia el caso de los nombres y valores de parámetros coincidentes:
import {Route, UrlSegment, UrlSegmentGroup} from '@angular/router'; export function caseInsensitiveMatcher(url: string) { return function( segments: UrlSegment[], segmentGroup: UrlSegmentGroup, route: Route ) { const matchSegments = url.split('/'); if ( matchSegments.length > segments.length || (matchSegments.length !== segments.length && route.pathMatch === 'full') ) { return null; } const consumed: UrlSegment[] = []; const posParams: {[name: string]: UrlSegment} = {}; for (let index = 0; index < matchSegments.length; ++index) { const segment = segments[index].toString().toLowerCase(); const matchSegment = matchSegments[index]; if (matchSegment.startsWith(':')) { posParams[matchSegment.slice(1)] = segments[index]; consumed.push(segments[index]); } else if (segment.toLowerCase() === matchSegment.toLowerCase()) { consumed.push(segments[index]); } else { return null; } } return { consumed, posParams }; }; } Editar : además del problema explicado anteriormente, hay otro error sutil que se resuelve ahora. El ciclo for debe iterar sobre matchSegments en lugar de sobre segments .
actualizar
Esto no llegó al nuevo enrutador todavía
original
Los emparejadores Regex se introdujeron recientemente. Esto podría ayudar para su caso de uso.
Ver https://github.com/angular/angular/pull/7332/files
Y este Plunker de Brandon Roberts
@RouteConfig([ { name : 'Test', //path : '/test', regex: '^(.+)/(.+)$', serializer: (params) => new GeneratedUrl(`/${params.a}/${params.b}`, {c: params.c}), component: Test // useAsDefault: true } ])