Cómo no cambiar la URL cuando se muestra la página de error 404 con ui-enrutador

Quiero mostrar la página de error 404, pero también quiero guardar la URL incorrecta en la ubicación.

Si voy a hacer algo como eso:

$urlRouterProvider.otherwise('404'); $stateProvider .state('404', { url: '/404', template: error404Template }); 

url cambiará a /404 . ¿Cómo puedo mostrar el mensaje de error en las URL incorrectas sin cambiar la URL actual?

Hay una solución para este escenario. Usamos 1) una función nativa de ui-router y 2) una configuración de configuración. Un ejemplo de trabajo se puede observar aquí .

1) Una característica nativa de las definiciones de estado de ui-enrutador es:

La url no es necesaria. El estado podría definirse sin su representación en la ubicación.

2) Una configuración de configuración es:

  • otherwise() para rutas no válidas , cuyo parámetro no tiene que ser una cadena con la URL predeterminada, pero podría ser una función también (citar) :

cadena de ruta | Función La ruta url a la que desea redireccionar o una regla de función que devuelve la ruta url. La versión de función tiene dos parámetros: $ injector y $ location

Solución: combinación de estos dos. Tendríamos state sin url y personalizado de lo otherwise :

 $stateProvider .state('404', { // no url defined template: '
error
', }) $urlRouterProvider.otherwise(function($injector, $location){ var state = $injector.get('$state'); state.go('404'); return $location.path(); });

Verifique todo en este ejemplo de trabajo

A partir de ui-router#0.2.15 , puede usar $state.go() y enviar la opción de no actualizar la ubicación:

 $urlRouterProvider.otherwise(function($injector) { var $state = $injector.get('$state'); $state.go('404', null, { location: false }); });