AngularJS ng-options ne rendant pas les valeurs

comment rendre la valeur de la liste d'options suivante?

$scope.limits = [ {value:  '5', text: 'Afficher 5 par page'},
                  {value: '10', text: 'Afficher 10 par page'},
                  {value: '15', text: 'Afficher 15 par page'},
                  {value: '20', text: 'Afficher 20 par page'}
                ];

<select id="limitType" name="limit" ng-model="limit" ng-options="limit.value as limit.text for limit in limits"></select> enregistrement par page

résultat attendu (valeur attendue = limite).la valeur":

<select ng-options="option.value as option.text for option in limits" ng-model="limit" id="limitType" class="ng-pristine ng-valid">
    <option value="5" selected="selected">Afficher 5 par page</option>
    <option value="10">Afficher 10 par page</option>
    <option value="15">Afficher 15 par page</option>
    <option value="20">Afficher 20 par page</option>
</select>

résultat:

<select ng-options="option.value as option.text for option in limits" ng-model="limit" id="limitType" class="ng-pristine ng-valid">
    <option value="0" selected="selected">Afficher 5 par page</option>
    <option value="1">Afficher 10 par page</option>
    <option value="2">Afficher 15 par page</option>
    <option value="3">Afficher 20 par page</option>
</select>
13
demandé sur Peter Mortensen 2013-01-20 18:50:37

4 réponses

la directive ng-options ne définit pas l'attribut value sur les éléments <options> . Il utilise toujours une séquence.

utilisant limit.value as limit.text for limit in limits signifie:

  • placer l'étiquette de <option> comme limit.text
  • enregistrez la valeur limit.value dans le select ng-model

vérifiez ce violon: http://jsfiddle.net/bmleite/k58Hw /

20
répondu bmleite 2017-01-07 13:51:16

pour que cela fonctionne, vous (nous) devez changer la façon dont nous soumettons les données au serveur.

le navigateur est" stupide", et il ne prend pas soin de AngularJS, jQuery ou tout autre cadre JavaScript faisant magie dans le code derrière. Si l'option contient une valeur d'index au lieu de la valeur réelle, le navigateur enverra la valeur d'index au serveur.

Si vous voulez le faire fonctionner, vous devez utiliser ng-repeat en conjonction avec l'option tag pour rendre des valeurs correctes, ou pour soumettre des données en appelant la méthode .post du contrôleur AngularJS.

C'est pourquoi J'aime et déteste AngularJS.

3
répondu user2560550 2017-01-07 13:52:50

je me rends compte que c'est une vieille question mais j'ai eu un problème avec cela aussi. Ma solution simple à cela était de créer une entrée cachée et de la lier en utilisant ngModel avec le select. Ensuite, lorsque vous faites le formulaire normal soumettre, soumettre l'entrée cachée. Espérons que cette aide.

2
répondu wlingke 2013-11-05 20:22:05

pour une approche alternative, nous pouvons utiliser ng-repeat

<select  ng-model="limit" id="limitType" class="ng-pristine ng-valid" >
 <option ng-repeat="option in limits " value="{{option.value}}" >
  {{option.text}}
 </option>
</select>
0
répondu Ejo V Joy 2017-05-23 07:42:08