As rotas angularjs podem ter valores de parâmetro opcionais?

Posso definir uma rota com parâmetros opcionais (mesmo modelo e controlador, mas alguns parâmetros devem ser ignorados se não existirem?

Então, ao invés de escrever as duas regras a seguir, tem apenas uma?

module.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}). when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl}) }]); 

Algo parecido com isto ([este parâmetro é opcional])

 when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl}) //note: this previous doesn't work 

Eu não consegui encontrar nada em sua documentação.

Parece que o Angular tem suporte para isso agora.

A partir dos documentos mais recentes (v1.2.0) para $routeProvider.when(path, route) :

path pode conter grupos nomeados opcionais com um ponto de interrogação ( :name? )

Como @ g-eorge mencionar, você pode fazer assim:

 module.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl}) }]); 

Você também pode fazer o quanto precisar de parâmetros opcionais.

Por favor, veja @jlareau resposta aqui: https://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

Você pode usar uma function para gerar a string de modelo:

 var app = angular.module('app',[]); app.config( function($routeProvider) { $routeProvider. when('/', {templateUrl:'/home'}). when('/users/:user_id', { controller:UserView, templateUrl: function(params){ return '/users/view/' + params.user_id; } } ). otherwise({redirectTo:'/'}); } ); 

Na verdade, acho que o OZ_ pode estar um pouco correto.

Se você tem a rota '/users/:userId' e navega para '/users/' (observe o trailing /), $routeParams no seu controller deve ser um object contendo userId: "" em 1.1.5. Então, não o userId não é completamente ignorado, mas eu acho que é o melhor que você vai conseguir.

@JamesBell Você pode usar a opção squash como foi respondida neste post: estado do aplicativo com param opcional e sem barra final

 .state('path', { url: '/path/:param1', params: { param1: { value: null, squash: true } }, views: { 'map-tab': { templateUrl: 'templates/map.html', controller: 'testCtrl' } } })