Le rotte di angularjs possono avere valori di parametro opzionali?

Posso impostare una rotta con parametri opzionali (stesso modello e controller, ma alcuni parametri dovrebbero essere ignorati se non esistono?

Quindi, invece di scrivere le seguenti due regole, ne hai 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}) }]); 

Qualcosa di simile ([questo parametro è facoltativo])

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

Non ho trovato nulla nella loro documentazione.

Sembra che Angular abbia il supporto per questo ora.

Dagli ultimi documenti (v1.2.0) per $routeProvider.when(path, route) :

path può contenere gruppi denominati opzionali con un punto interrogativo ( :name? )

Come la menzione di @ g-eorge, puoi farlo in questo modo:

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

Puoi anche fare quanto hai bisogno di parametri opzionali.

Si prega di consultare la risposta @jlareau qui: https://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

È ansible utilizzare una funzione per generare la stringa del modello:

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

In realtà penso che OZ_ possa essere alquanto corretto.

Se hai il percorso '/users/:userId' e vai a '/users/' (nota il trailing /), $routeParams nel tuo controller dovrebbe essere un object contenente userId: "" in 1.1.5. Quindi nessun parametro userId non è completamente ignorato, ma penso che sia il meglio che otterrai.

@JamesBell Puoi usare l’opzione squash come è stato risposto in questo post: stato dell’app con param opzionale e nessuna barra finale

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