Les routes angularjs peuvent-elles avoir des valeurs de paramètres optionnelles?
Puis-je définir une route avec des paramètres optionnels (même 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 avoir 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 ceci ([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.
5 réponses
Il semble Qu'Angular ait un support pour cela maintenant.
De la dernière (v1.2. 0) docs pour $routeProvider.when(path, route)
:
path
peut contenir en option des groupes nommés avec un point d'interrogation (:name?
)
Comme @george mentionner, 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 voir 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 la chaîne de modèle:
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 QU'OZ_ peut être quelque peu correct.
Si vous avez la route '/users/:userId'
et naviguez vers '/users/'
(notez le final /), $routeParams
dans votre contrôleur devrait ê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 obtiendrez.
@ JamesBell vous pouvez utiliser l'option squash comme cela a été répondu dans ce post: État de l'application avec paramètre optionnel et aucune barre oblique finale
.state('path', {
url: '/path/:param1',
params: {
param1: {
value: null,
squash: true
}
},
views: {
'map-tab': {
templateUrl: 'templates/map.html',
controller: 'testCtrl'
}
}
})