angularjs - stateparams - Cómo no cambiar la URL cuando se muestra la página de error 404 con ui-router
ui view ui router (2)
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
});
});
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 así:
$urlRouterProvider.otherwise(''404'');
$stateProvider
.state(''404'', {
url: ''/404'',
template: error404Template
});
url cambiará a /404
. ¿Cómo puedo mostrar un mensaje de error en las URL incorrectas sin cambiar la URL real?
Hay solución para este escenario. Usaríamos 1) una característica nativa de ui-router
y 2) un ajuste de configuración. Un ejemplo de trabajo se puede observar aquí .
1) Una característica nativa de las definiciones de estado de ui-router es:
La
url
no es necesaria. El estado podría definirse sin su representación en el lugar.
2) Un ajuste de configuración es:
-
otherwise()
para rutas no válidas , cuyo parámetro no tiene que ser una cadena con la URL predeterminada, sino que también podría ser una función (citar) :
ruta cadena 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 la función se pasa dos parámetros: $ inyector y $ ubicación
Solución: combinación de estos dos. Tendríamos state
sin url
y costumbre de lo otherwise
:
$stateProvider
.state(''404'', {
// no url defined
template: ''<div>error</div>'',
})
$urlRouterProvider.otherwise(function($injector, $location){
var state = $injector.get(''$state'');
state.go(''404'');
return $location.path();
});
Compruebe que todo en este ejemplo de trabajo