Usando angular-ui-router, come posso usare il metodo altrimenti su $ stateProvider o come posso usarlo?
Usando angular-ui-router, come posso usare il metodo altrimenti su $ stateProvider o come posso usarlo?
Risposte:
Non puoi usare solo $stateProvider
.
Devi iniettare $urlRouterProvider
e creare un codice simile a:
$urlRouterProvider.otherwise('/otherwise');
L' /otherwise
URL deve essere definito in uno stato come al solito:
$stateProvider
.state("otherwise", { url : '/otherwise'...})
Vedi questo link dove spiega ksperling
$stateProvider
. È meno faticoso se vuoi semplicemente visualizzare un modello, ma non reindirizzarlo. Preferisco la risposta di @ juan-hernandez.
otherwise
(in questo caso '/otherwise'
) deve corrispondere al nome dello stato (il primo parametro a .state
) o al valore di url
opzione?
Puoi farlo $stateProvider
usando la sintassi catch all ( "*path"
). Devi solo aggiungere una configurazione di stato in fondo alla tua lista come la seguente:
$stateProvider.state("otherwise", {
url: "*path",
templateUrl: "views/error-not-found.html"
});
Tutte le opzioni sono spiegate in https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters .
La cosa bella di questa opzione, al contrario $urlRouterProvider.otherwise(...)
, è che non sei obbligato a cambiare posizione.
you're not forced to a location change
:?
/this/does/not/exist
, l'URL rimarrà tale nella barra degli indirizzi. L'altra soluzione ti porterà a/otherwise
Puoi anche inserire manualmente $ state nella funzione else, che puoi quindi navigare in uno stato non URL. Ciò ha il vantaggio del browser che non modifica la barra degli indirizzi, il che è utile per gestire il ritorno a una pagina precedente.
$urlRouterProvider.otherwise(function ($injector, $location) {
var $state = $injector.get('$state');
$state.go('defaultLayout.error', {
title: "Page not found",
message: 'Could not find a state associated with url "'+$location.$$url+'"'
});
});
Ok, lo stupido momento in cui ti rendi conto che la domanda che hai posto ha già una risposta nelle prime righe del codice di esempio! Dai un'occhiata al codice di esempio.
angular.module('sample', ['ui.compat'])
.config(
[ '$stateProvider', '$routeProvider', '$urlRouterProvider',
function ($stateProvider, $routeProvider, $urlRouterProvider) {
$urlRouterProvider
.when('/c?id', '/contacts/:id')
.otherwise('/'); // <-- This is what I was looking for !
....
Voglio solo intervenire sulle ottime risposte che sono già fornite. L'ultima versione di ha @uirouter/angularjs
contrassegnato la classe UrlRouterProvider
come deprecata. Ora consigliano di usare UrlService
invece. È possibile ottenere lo stesso risultato con la seguente modifica:
$urlService.rules.otherwise('/defaultState');
Metodi aggiuntivi: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html
I riferimenti di risposta accettatiangular-route
chiedono su ui-router
. La risposta accettata utilizza il "monolitico" $routeProvider
, che richiede il ngRoute
modulo (mentre ui-router
necessita diui.router
modulo)
La risposta con il punteggio più alto usa $stateProvider
invece e dice qualcosa di simile .state("otherwise", { url : '/otherwise'... })
, ma non riesco a trovare alcuna menzione di "altrimenti" nella documentazione che collega . Tuttavia, vedo che $stateProvider
è menzionato in questa risposta dove dice:
Non puoi usare solo
$stateProvider
. Hai bisogno di iniettare$urlRouterProvider
È qui che la mia risposta potrebbe aiutarti. Per me era sufficiente usare $urlRouterProvider
proprio così:
my_module
.config([
, '$urlRouterProvider'
, function(
, $urlRouterProvider){
//When the url is empty; i.e. what I consider to be "the default"
//Then send the user to whatever state is served at the URL '/starting'
//(It could say '/default' or any other path you want)
$urlRouterProvider
.when('', '/starting');
//...
}]);
Il mio suggerimento è coerente con la ui-router
documentazione , ( questa specifica revisione ), dove include un uso simile del file. when(...)
metodo (la prima chiamata alla funzione):
app.config(function($urlRouterProvider){
// when there is an empty route, redirect to /index
$urlRouterProvider.when('', '/index');
// You can also use regex for the match parameter
$urlRouterProvider.when(/aspx/i, '/index');
})
$stateProvider.otherwise
, quindi mi aiuterà)