Caso contrário, no StateProvider

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