uirouter sref multiple javascript angularjs angular-ui-router angular-ui

javascript - multiple - angularjs ui router ui sref



Cómo agregar guid regex en el estado ui-router angular (3)

Tengo esta ruta

.state(''mystate'', { url: ''/{id}'', templateUrl: ''/views/partial.html'' });

El id param debe ser un guid en forma como esta "2a542f61-5fff-4607-845d-972e6c3ad1e4". ¿Cómo agrego esto en la url "url: ''/ {id:? Qué debo poner aquí}''".


Después de mucho ensayo y error, se me ocurrió:

$urlMatcherFactoryProvider.type(''guid'', { encode: angular.identity, decode: angular.identity, equals: function(a, b) { return a.toUpperCase() === b.toUpperCase(); }, is: function(val) { // Local to avoid any lastIndex issues var GUID_REGEXP = /^[a-f/d]{8}-(?:[a-f/d]{4}-){3}[a-f/d]{12}$/i; return GUID_REGEXP.test(val); }, // No anchors or flags with pattern pattern: /[a-fA-F/d]{8}-(?:[a-fA-F/d]{4}-){3}[a-fA-F/d]{12}/ });

Esto se basa en la respuesta de @ just-boris. Una diferencia clave es el pattern . Sin esto, parece que los GUID no válidos no activarán $urlRouterProvider.otherwise() .


Hay un plunker de trabajo

Podemos simplemente proporcionar regexp en la definición de url:

url: "/{id:(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})}",

Lea más acerca de nuestras opciones para la definición de URL:

http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.type:UrlMatcher

pequeño fragmento:

''{'' name '':'' regexp|type ''}'' - marcador de posición rizado con regexp o nombre de tipo. En caso de que la expresión regular contenga llaves, deben estar en pares iguales o escaparse con una barra diagonal inversa.


Puede definir su propio tipo de parámetro.

var GUID_REGEXP = /^[a-f/d]{8}-([a-f/d]{4}-){3}[a-f/d]{12}$/i; $urlMatcherFactoryProvider.type(''guid'', { encode: angular.identity, decode: angular.identity, is: function(item) { return GUID_REGEXP.test(item); } });

Aquí hay un escaparate en Plunker con esta solución

A continuación, especifique este tipo en la expresión de la ruta url:

.state(''mystate'', { url: ''/{id?guid}'', templateUrl: ''/views/partial.html'' });

Puede leer más en esa página en documentos