Come non cambiare l’url quando mostra la pagina di errore 404 con ui-router

Voglio mostrare la pagina di errore 404, ma voglio anche salvare l’URL sbagliato nella posizione.

Se farò qualcosa del genere:

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

l’URL cambierà in /404 . Come posso mostrare un messaggio di errore su URL errati senza modificare l’URL effettivo?

C’è una soluzione per questo scenario. Useremmo 1) una caratteristica nativa per ui-router e 2) un’impostazione di configurazione. Un esempio di lavoro potrebbe essere osservato qui .

1) Una caratteristica nativa delle definizioni dello stato del router è:

L’ url non è necessario. Lo stato potrebbe essere definito senza la sua rappresentazione in posizione.

2) Un’impostazione di configurazione è:

  • otherwise() per route non valide , quale parametro non deve essere una stringa con l’URL di default, ma potrebbe anche essere una funzione (citare) :

percorso Stringa | Funzione Il percorso url a cui si desidera redirect o una regola di funzione che restituisce il percorso dell’URL. La versione della funzione è passata due parametri: $ injector e $ location

Soluzione: combinazione di questi due. Avremmo state senza url e personalizzato 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(); });

Controlla tutto in questo esempio di lavoro

A partire da ui-router#0.2.15 è ansible utilizzare $state.go() e inviare l’opzione non aggiornare la posizione:

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