27 votes

Les routes angularjs peuvent-elles avoir des valeurs de paramètre par défaut?

Puis-je définir une valeur par défaut d'un paramètre d'une route dans angularjs? Existe-t-il un moyen de gérer '/ products / 123' et '/ products /' par la même route?

Je cherche à refactoriser mon code existant, qui ressemble à:

 myModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/products/', {templateUrl: 'products.html', controller: ProductsCtrl}).            
     when('/products/:productId', {templateUrl: 'products.html', controller: ProductsCtrl})
}]);


function ProductsCtrl($scope, $routeParams) {
    $scope.productId = typeof($routeParams.productId) == "undefined" ? 123 : $routeParams.productId;
}
 

Cela fonctionne, mais ce n'est pas très élégant. Y a-t-il une meilleure façon?

27voto

kju Points 1171

Je reconnais que cette question est ancienne, mais quand même: pourquoi ne redirigez-vous pas simplement l'URL "vide" vers une URL contenant le productId par défaut?

 myModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/products/', {redirectTo: '/products/123'}).
     when('/products/:productId', {templateUrl: 'products.html', controller: ProductsCtrl})
}]);
 

24voto

Haralan Dobrev Points 2682

AngularJS ne permet pas de valeurs par défaut pour les paramètres de la route.

Mais les routes (en AngularJS) ne devrait pas avoir de paramètres par défaut.

Ressources pourraient avoir les paramètres par défaut.

En AngularJS si vous souhaitez un itinéraire avec un paramètre facultatif, ce sont en fait deux routes différentes.

Pourquoi?

  • Les itinéraires doivent être simples

  • Les Routes ne permettent pas d'expressions régulières correspondant pour les paramètres

  • Les Routes ne sont pas quelque chose qui expose une API pour travailler dans votre application (à la différence de Ressources n'). Les Routes sont juste de configuration qui permet de brancher une URL avec un modèle et un contrôleur. Donc plus d'itinéraires, c'est mieux:

    • Il est clair de feuilles de route pour l'url.

    • Il est plus verbeux, mais plus simple à lire. Avoir des routes plus complexes serait de créer un plus raide de la courbe d'apprentissage où AngularJS n'en ont pas besoin.

À la différence de serveur-côté de cadres qui ont des itinéraires

  • AngularJS routes n'ont pas de noms.
  • Que vous ne générez pas les URLs de ces itinéraires définis.
  • Vous n'avez pas la logique (un.k.une des fonctions) dans les itinéraires des définitions.

Plus simple itinéraires = plus de lignes pour définir entre eux = moins de maux de tête à travailler avec eux.

REMARQUE: Veuillez garder à l'esprit la question et cette réponse sont pour une ancienne version de AngularJS (1.0 je crois) datant d'avant les nouveaux itinéraires/mise en œuvre des ressources.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X