Peut angularjs routes ont des valeurs de paramètre par défaut?
Puis-je définir une valeur par défaut d'un paramètre d'un itinéraire dans AngularJS? Est-il un moyen d'avoir /products/123
et /products/
gérée par le même itinéraire ?
Je suis à la recherche de refactorisation de code existant, ce 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 il n'est pas très élégant. Est-il un meilleur moyen ?
- Pas familier avec angularJS, mais qu'en est
var param ={templateUrl: 'products.html', controller: ProductsCtrl}; $routeProvider.when('/products/', param).when('/products/:productId', param)
? - Vous pouvez simplifier votre contrôleur de code un peu avec: $champ d'application.productId = $routeParams.productId || 123;
- bien sûr, cela fonctionne si productId == 0 n'est pas une pièce d'identité valide
- Bon appel @Liviu
- Merci les gars, cela fait un peu plus court. Juste la question de savoir si les paramètres par défaut sont possibles pour aller... 😉
- N'oubliez pas
ProductsCtrl.$inject = ['$scope', '$routeParams'];
. $scope.productId = $routeParams.productId || 123;
devrait fonctionner
Vous devez vous connecter pour publier un commentaire.
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.
Dans
AngularJS
si vous voulez un itinéraire avec un paramètre facultatif, ce sont en fait deux routes différentes.Pourquoi?
Routes doit être simple
Routes ne permettent pas d'expressions régulières correspondant pour les paramètres
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.
Contrairement côté serveur cadres qui ont itinéraires
Plus simple, les itinéraires = plus de lignes pour définir entre eux = moins de maux de tête à travailler avec eux.
NOTE: 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.
Je reconnais que cette question est vieux, mais quand même: Pourquoi ne pas vous suffit de rediriger le "vide" URL à l'un contenant la valeur par défaut productId?
J'ai eu une demande similaire. Ce que j'ai fait était de créer une fonction pour résoudre. Quelque chose comme ci-dessous
Avec url: "/view/:id/:état?", Vous pouvez indiquer un paramètre facultatif.
Juste pensé que quelqu'un a besoin d'elle.
Ne sais pas si cette question est spécifique à
$routeProvider
mais dans $stateProvider, vous pouvez y parvenir en