¿Es posible tener un parámetro de ruta opcional en la ruta Angular 2? Probé la sintaxis Angular 1.x en RouteConfig pero recibí el siguiente error:
"EXCEPCIÓN ORIGINAL: Ruta" / usuario /: id? "Contiene"? "Que no está permitido en una configuración de ruta".
@RouteConfig([
{
path: '/user/:id?',
component: User,
as: 'User'
}])
javascript
angular
Jeroen
fuente
fuente

RouteParamsno importar a componentes, verifique esto: stackoverflow.com/a/36792261/806202 . La solución es usarActivatedRoute:route.snapshot.params['routeParam']De esta forma, el componente no se vuelve a representar cuando se agrega el parámetro.
fuente
pathMatch: 'full'para redirigir, de lo contrario, las rutas comousers/admintambién se redirigen en mi caso/users/allo/users/homelea 'todo' o 'inicio' como elidy simplemente ignórelo si coincide con su valor mágico. Entonces la primera línea de arriba se convierteredirectTo: 'users/home'o lo que sea que decidas. Para mí, un corte final realmente se destaca como algo incorrecto.Se recomienda utilizar un parámetro de consulta cuando la información es opcional.
de https://angular.io/guide/router#optional-route-parameters
Solo necesita sacar el parámetro de la ruta de la ruta.
fuente
Angular 4: solución para abordar el orden del parámetro opcional:
HACER ESTO:
Tenga en cuenta que las rutas
productsyproducts/:idse nombran exactamente igual. Angular 4 seguirá correctamente lasproductsrutas sin parámetro, y si es un parámetro, seguiráproducts/:id.Sin embargo, la ruta para la ruta sin parámetros no
productsdebe tener una barra inclinada final; de lo contrario, angular la tratará incorrectamente como una ruta de parámetros. Entonces, en mi caso, tuve la barra inclinada final para los productos y no estaba funcionando.NO HAGAS ESTO:
fuente
dataal componente, que puede ser diferente para cada ruta incluso al mismo componente. Se{path: 'products', component: ProductsComponent, data: { showAllProducts: true} },podría usar un ejemplo y luego lo verificaráshowAllProducts. Un poco más agradable que buscar un valor nulo, pero para los casos más simples, probablemente esté bien.La respuesta de Rerezz es bastante agradable, pero tiene una falla grave. Hace que el
Usercomponente vuelva a ejecutar elngOnInitmétodo.Puede ser problemático cuando haces cosas pesadas allí y no quieres que se vuelva a ejecutar cuando cambias de la ruta no paramétrica a la paramétrica. Aunque esas dos rutas están destinadas a imitar un parámetro de url opcional, no se convierten en 2 rutas separadas.
Esto es lo que sugiero para resolver el problema:
Luego puede mover la lógica responsable de manejar el parámetro al
UserWithParamcomponente y dejar la lógica base en elUsercomponente. Lo que hagasUser::ngOnInitno se volverá a ejecutar cuando navegues de / user a / user / 123 .No se olvide de poner el
<router-outlet></router-outlet>de laUserplantilla 's.fuente
Las respuestas sugeridas aquí, incluida la respuesta aceptada de rerezz que sugiere agregar múltiples entradas de ruta funcionan bien.
Sin embargo, el componente se volverá a crear al cambiar entre las entradas de ruta, es decir, entre la entrada de ruta con el parámetro y la entrada sin el parámetro.
Si desea evitar esto, puede crear su propio emparejador de ruta que coincida con ambas rutas:
Luego use el matcher en su configuración de ruta:
fuente
Con angular4 solo necesitamos organizar las rutas juntas en jerarquía
Esto funciona para mi. De esta forma, el enrutador sabe cuál es la siguiente ruta en función de los parámetros de ID de opción.
fuente
Me encontré con otra instancia de este problema, y en la búsqueda de una solución llegó aquí. Mi problema era que estaba haciendo a los niños y cargando de forma diferida los componentes también para optimizar un poco las cosas. En resumen, si eres perezoso cargando el módulo principal. Lo principal fue que usé '/: id' en la ruta, y son quejas de que '/' sea parte de ella. No es el problema exacto aquí, pero se aplica.
Enrutamiento de aplicaciones del padre
Rutas secundarias cargadas perezosas
fuente
No puedo comentar, pero en referencia a: Angular 2 parámetro de ruta opcional
una actualización para Angular 6:
Consulte https://angular.io/api/router/ActivatedRoute para obtener información adicional sobre el enrutamiento de Angular6.
fuente
Ante un problema similar con la carga diferida, he hecho esto:
Y luego en el componente:
De esta manera:
La ruta sin
/se redirige a la ruta con. Debido a estopathMatch: 'full', solo se redirige dicha ruta completa específica.Entonces,
users/:idse recibe. Si la ruta real fueusers/,ides"", así que regístresengOnInity actúe en consecuencia; de lo contrario,ides la identificación y proceder.El resto del componente actúa sobre
selectedUsero no indefinido (* ngIf y cosas así).fuente