150 votes

Comment utiliser ng-option pour définir la valeur par défaut d'un élément de sélection ?

J'ai vu la documentation de la directive select d'Angular ici : http://docs.angularjs.org/api/ng.directive:select . Je n'arrive pas à trouver comment définir la valeur par défaut. C'est déroutant :

sélectionner comme étiquette pour une valeur dans un tableau

Voici l'objet :

{
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
}

Le html (travail) :

<select><option ng-repeat="value in prop.values">{{value}}</option></select>

puis j'essaie d'ajouter un attribut ng-option à l'intérieur de l'élément de sélection pour définir prop.value comme option par défaut (ne fonctionne pas).

ng-options="(prop.value) for v in prop.values"

Qu'est-ce que je fais mal ?

132voto

James Kleeh Points 4213

Donc en supposant que cet objet est dans votre champ d'application :

<div ng-controller="MyCtrl">
  <select ng-model="prop.value" ng-options="v for v in prop.values">
  </select>
</div>

function MyCtrl($scope) {
  $scope.prop = {
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
  };
}

Travailler sur Plunkr : http://plnkr.co/edit/wTRXZYEPrZJRizEltQ2g

2 votes

Ok je l'ai eu ! le ng-option remplace le <option ng-repeat="value in prop.values">{{value}}</option> merci encore

2 votes

Il doit y avoir un moyen plus simple de faire cela, je trouve cela très compliqué pour une simple sélection de valeur par défaut dans angular js.

1 votes

La directive ng-option est quelque peu compliquée et sa syntaxe prête à confusion. Je pense que la possibilité de lier des objets l'a rendue un peu compliquée. La façon dont j'essaie de m'en souvenir est que chaque fois que j'utilise un objet, j'indique explicitement quelles propriétés utiliser pour les attributs valeur/texte du contrôle de sélection. Pour plus d'informations, voir ceci : ozkary.com/2015/08/angularjs-ngoption-directive-simplified.html

69voto

Jess Points 2039

El documentation angulaire pour select * ne répond pas explicitement à cette question, mais elle est présente. Si vous regardez le script.js vous verrez ceci :

function MyCntrl($scope) {
  $scope.colors = [
    {name:'black', shade:'dark'},
    {name:'white', shade:'light'},
    {name:'red', shade:'dark'},
    {name:'blue', shade:'dark'},
    {name:'yellow', shade:'light'}
  ];
  $scope.color = $scope.colors[2]; // Default the color to red
}

Voici le html :

<select ng-model="color" ng-options="c.name for c in colors"></select>

Cela semble être une manière plus évidente d'attribuer par défaut une valeur sélectionnée sur un fichier <select> con ng-options . Cela fonctionnera également si vous avez des étiquettes/valeurs différentes.

* C'est à partir d'Angular 1.2.7

0 votes

Cela a fonctionné pour moi, je doute que cela se reproduise, mais j'utilise actuellement AngularJS v1.2.27 au cas où quelqu'un trouverait cela et s'interrogerait sur la compatibilité.

43voto

Humberto Morera Points 1098

Cette réponse est plus utile lorsque vous apportez des données à partir d'une base de données, que vous effectuez des modifications et que vous persistez ensuite les changements.

 <select  ng-options="opt.id as opt.name for opt in users" ng-model="selectedUser"></select>

Consultez l'exemple ici :

http://plnkr.co/edit/HrT5vUMJOtP9esGngbIV

1 votes

Enfin une réponse qui fonctionne ici, upvoted ! Aussi avec cette solution vous pouvez avoir l'option indéfinie fonctionnant correctement. <option value="">Veuillez sélectionner</option>

0 votes

Je suis content que ce post existe, j'ai cherché pendant un moment une solution et celle-ci a résolu mon problème.

22voto

nirav Points 69
<select name='partyid' id="partyid" class='span3'>
<option value=''>Select Party</option>
<option ng-repeat="item in partyName" value="{{item._id}}" ng-selected="obj.partyname == item.partyname">{{item.partyname}}
</option>
</select>

5 votes

Mauvaise pratique ici... Regardez la deuxième note jaune : docs.angularjs.org/api/ng/directive/select .

0 votes

Cela ne va pas fonctionner, par exemple lorsque vous essayez d'éditer l'enregistrement, comment l'enregistrement va-t-il se lier au champ ?

21voto

BatteryAcid Points 6318

Si votre tableau d'objets est complexe comme :

$scope.friends = [{ name: John , uuid: 1234}, {name: Joe, uuid, 5678}];

Et votre modèle actuel était réglé sur quelque chose comme :

$scope.user.friend = {name:John, uuid: 1234};

Cela a aidé d'utiliser le track by sur l'uuid (ou tout autre champ unique), pour autant que le ng-model="user.friend" ait également un uuid :

<select ng-model="user.friend" 
ng-options="friend as friend.name for friend in friends track by friend.uuid"> 
</select>

0 votes

Cette réponse a fait ma journée ! Jetez également un coup d'œil à la rubrique "track by" de cette documentation : docs.angularjs.org/api/ng/directive/ngOptions

0 votes

C'est la meilleure réponse !

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