¿Pueden las rutas angularjs tener valores de parámetros opcionales?

¿Puedo establecer una ruta con params opcionales (misma plantilla y controlador, pero algunos params deben ignorarse si no existen?

Entonces, en lugar de escribir las dos reglas siguientes, ¿tiene solo una?

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

Algo como esto ([este parámetro es opcional])

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

No pude encontrar nada en su documentación.

Parece que Angular tiene soporte para esto ahora.

Desde los últimos (v1.2.0) documentos para $routeProvider.when(path, route) :

path puede contener grupos con nombre opcionales con un signo de interrogación ( :name? )

Como mencionó @ g-eorge, puedes hacerlo así:

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

También puede hacer tanto como necesite parámetros opcionales.

Consulte la respuesta de @jlareau aquí: https://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

Puede usar una función para generar la cadena de plantilla:

 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:'/'}); } ); 

En realidad, creo que OZ_ puede ser algo correcto.

Si tiene la ruta '/users/:userId' y navega hasta '/users/' (observe el final /), $routeParams en su controlador debe ser un objeto que contenga userId: "" en 1.1.5. Así que no el userId patwigter no es ignorado por completo, pero creo que es lo mejor que obtendrás.

@JamesBell Puede usar la opción squash como se respondió en esta publicación: estado de la aplicación con param opcional y sin barra posterior

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