Usando angular-ui-roteador, como posso usar o método de outra forma em $ stateProvider ou como posso usá-lo em tudo?
Você não pode usar apenas $stateProvider
.
Você precisa injetar $urlRouterProvider
e criar um código semelhante a:
$urlRouterProvider.otherwise('/otherwise');
A URL /otherwise
deve ser definida em um estado como de costume:
$stateProvider .state("otherwise", { url : '/otherwise'...})
Veja este link onde ksperling explica
Você pode com $stateProvider
usando a syntax catch all ( "*path"
). Você só precisa adicionar uma configuração de estado na parte inferior da lista, como a seguinte:
$stateProvider.state("otherwise", { url: "*path", templateUrl: "views/error-not-found.html" });
Todas as opções são explicadas em https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters .
O bom desta opção, ao contrário de $urlRouterProvider.otherwise(...)
, é que você não é forçado a uma mudança de local.
Você também pode injetar manualmente $ state na function que, de outra forma, pode navegar para um estado que não seja url. Isso tem a vantagem de o navegador não alterar a barra de endereços, o que é útil para lidar com a volta à página anterior.
$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, o momento tolo em que você percebe que a pergunta que você fez já foi respondida nas primeiras linhas do código de amostra! Basta dar uma olhada no código de exemplo.
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 ! ....
Dê uma olhada aqui.
A resposta aceita referências angular-route
pergunta sobre ui-router
. A resposta aceita usa o $routeProvider
“monolítico” , que requer o módulo ngRoute
(enquanto que o ui-router
precisa do módulo ui.router
)
A resposta com maior sorting usa $stateProvider
, e diz algo como .state("otherwise", { url : '/otherwise'... })
, mas não consigo encontrar nenhuma menção de “caso contrário” na documentação links . No entanto, vejo que $stateProvider
é mencionado nesta resposta, onde diz:
Você não pode usar apenas
$stateProvider
. Você precisa injetar$urlRouterProvider
É aí que minha resposta pode te ajudar. Para mim, foi suficiente usar o $urlRouterProvider
assim:
my_module .config([ , '$urlRouterProvider' , function( , $urlRouterProvider){ //When the url is empty; ie 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'); //... }]);
Minha sugestão é consistente com a documentação do ui-router
, ( esta revisão específica ), onde inclui um uso semelhante do. when(...)
method (a primeira chamada para a function):
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'); })
Eu só quero conversar sobre as ótimas respostas que já foram fornecidas. A versão mais recente do @uirouter/angularjs
marcou a class UrlRouterProvider
como obsoleta. Eles agora recomendam usar o UrlService
. Você pode obter o mesmo resultado com a seguinte modificação:
$urlService.rules.otherwise('/defaultState');
Métodos adicionais: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html