javascript - tiene - De lo contrario, para estados con parámetros escritos
quitar propiedades jquery (1)
Empecé a usar parámetros escritos (como {id:int}
) en la configuración de mi ruta. Si un estado no coincide debido al tipo , de lo otherwise
no parece activarse.
Por ejemplo:
$stateProvider
.state(''stuff'', {
url: ''/version/{version:int}/stuff'',
templateUrl: // ...,
controller: // ...
})
.state(''list'', {
url: ''/list'',
// ...
});
$urlRouterProvider.otherwise(''/list'');
Si la versión es "x" (no una int), no se me redirige a la página de la lista. En cambio, termino en una página vacía sin errores en la consola.
¿Cómo puedo arreglar esto?
(Aclaración: estoy escribiendo direcciones URL no válidas en la barra de direcciones para probar esto, no usando ui-sref
).
Actualización: creo que he encontrado lo que está causando (gracias a @ RadimKöhler por un ejemplo que eliminó algunas posibilidades). Ver mi plunk
Todo funciona bien, excepto las URL que no coinciden con un tipo personalizado creado con $urlMatcherFactoryProvider.type()
. Utilicé un tipo de guid
basado en las respuestas a esta pregunta .
Puedo solucionar esto utilizando expresiones regulares en la URL, pero sería bueno tener una solución.
Más información: al agregar un pattern
al objeto Tipo personalizado, se arregla esto. El patrón tiene que omitir los anclajes ( ^$
), por lo que algo así como:
pattern: /[a-f/d]{8}-(?:[a-f/d]{4}-){3}[a-f/d]{12}/i
Yo diría que el concepto como querías está funcionando. Hay un ejemplo de trabajo
este estado def (1: 1 a pregunta)
$stateProvider
.state(''stuff'', {
url: ''/version/{version:int}/stuff'',
templateUrl: ''tpl.html'',
controller: ''StuffCtrl'',
})
.state(''list'', {
url: ''/list'',
templateUrl: ''tpl.html'',
controller: ''ListCtrl'',
});
$urlRouterProvider.otherwise(''/list'');
manejará adecuadamente estos enlaces:
// list
<a href="#/list">
// ui-sref
<a ui-sref="stuff({version:1})">
<a ui-sref="stuff({version:2})">
// href
<a href="#/version/12/stuff">
estos no funcionarán (como se esperaba) - por lo que no crearán ningún href (tal estado con tales params no existe)
<a ui-sref="stuff({version:''A''})">
<a ui-sref="stuff({version:''xyz''})">
estos href
serán redirigidos a lo contrario
<a href="#/version/x/stuff">
<a href="#/version/AB/stuff">
Verifíquelo en acción aquí