Puis-je définir une route avec des paramètres facultatifs (mêmes modèle et contrôleur, mais certains paramètres doivent être ignorés s'ils n'existent pas?)
Donc, au lieu d’écrire les deux règles suivantes, n’en avez qu’une?
module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).
when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);
Quelque chose comme ça ([ce paramètre est facultatif])
when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work
Je n'ai rien trouvé dans leur documentation.
Il semble que Angular ait maintenant un support pour cela.
Depuis la dernière (v1.2.0) docs pour $routeProvider.when(path, route)
:
path
peut contenir des groupes nommés facultatifs avec un point d'interrogation (:name?
)
Comme @ g-eorge mention, vous pouvez le faire comme ceci:
module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);
Vous pouvez également faire autant que vous avez besoin de paramètres optionnels.
Veuillez consulter la réponse de @ jlareau ici: https://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl
Vous pouvez utiliser une fonction pour générer le modèle de chaîne:
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 fait, je pense que OZ_ peut être quelque peu correct.
Si vous avez la route '/users/:userId'
et naviguez jusqu'à '/users/'
(notez le// suivant), $routeParams
dans votre contrôleur doit être un objet contenant userId: ""
dans 1.1.5. Donc, non, le paramater userId
n'est pas complètement ignoré, mais je pense que c'est le meilleur que vous puissiez obtenir.