web-dev-qa-db-fra.com

Les routes angularjs peuvent-elles avoir des valeurs de paramètre optionnelles?

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.

162
Alexandru R

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?)

240
g-eorge

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.

56
zmilan

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

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.

2
Roy Daniels