2012-12-03 13 views
19

voglio aggiungere un html selezionare con le opzioni AM, PM con angularjs, che cosa ho bisogno sta avendo la chiave e il valore dell'opzione essere lo stesso:Angularjs ngOption con serie

<option value="AM">AM</option> 
<option value="PM">PM</option> 

miei sguardi html Ti piace questa

<select ng-model="ampm" ng-options="k as v for (k , v) in ampms"></select> 

e il mio controller sembra

$scope.ampm = (new Date().getHours()) >= 12 ? 'PM' : 'AM'; 
    $scope.ampms ={"AM":"AM","PM":"PM"}; 

e ogni sorta di cosa bene.

mia domanda è perché i cant hanno la stessa cosa quando ho usato un array (ho provato tutte le opzioni nei NG-opzioni) come questo

$scope.ampms =["AM","PM"]; 

quello che mai mi faccio sempre questo

<option value="0">AM</option> 
<option value="1">PM</option> 

Quello che voglio è utilizzare un array come sopra con l'opzione ha la chiave e il valore lo stesso.

risposta

10

Questo è un comportamento di default di NG-opzioni in angolare. Se non si specifica un nome chiave, angular sceglierà automaticamente di utilizzare l'indice anziché una chiave. Il codice che può essere visto su line 405 in /src/ng/directives/select.js on Angular's Github repository.

Non può nemmeno essere forzato da "valore come valore (indice, valore) nei valori".

Ma come dnc253 mi ha appena battuto con la sua risposta (si è mostrato mentre stavo scrivendo) ... non devi preoccuparti, Angular fa tutto automaticamente.

26

Con AngularJS, non è necessario preoccuparsi di quale sia il valore dell'opzione. Tutti i selezioni che ho visto con ng-options hanno valori pari a 0. Se siete solo in cerca di un menu a discesa con le due opzioni, può essere semplice come

<select ng-model="ampm" ng-options="currOption for currOption in ['AM', 'PM']"></select> 

Vedi http://jsfiddle.net/EyBVN/1/

+0

Ho cercato il link che hai elencato, hanno ancora gli stessi valori di 0,1 non AM, PM – ibmkhd

+0

Ora che hai accettato la risposta, hai capito quello che abbiamo stai dicendo nelle risposte? Non importa quale sia l'attributo value impostato su. Angular aggiornerà il tuo modello per te in base all'opzione selezionata. – dnc253

+4

È importante che la destinazione del modulo (server) si aspetti un valore di stringa anziché un indice. –

2

Ho trovato un modo per inserire dati specifici nel valore delle opzioni per una selezione. È necessario aggiungere un attributo ng-repeat per l'opzione etichetta all'interno del tag select:

<select id="{{question.id}}" name="{{question.id}}" 
    class="{{question.inputclass}}" ng-required="question.required" 
    title="{{question.title}}"> 
    <option value=""></option> 
    <optgroup ng-repeat="group in question.data" label="{{group.group}}"> 
    <option ng-repeat="item in group.data" value="{{item.value}}" 
     ng-selected="{{item.value == question.defaultValue}}"> 
      {{item.description}} 
    </option> 
    </optgroup> 
</select> 

Come bonus, ho lasciato i tag gruppo di opzioni in atto per servire da esempio per tutti.

Il question.dataJSON è:

[ 
    {"group":"Canada","data":[{"value":"Ontario","description":"Toronto"}, 
          {"value":"Quebec","description":"Quebec City"}, 
          {"value":"Manitoba","description":"Winnipeg"} 
          ] 
    }, 
    {"group":"Mexico","data":[{"value":"Jalisco","description":"Guadalajara"}, 
          {"value":"Nayarit","description":"Tepic"} 
          ] 
    }, 
    {"group":"United States of America","data":[ 
          {"value":"Alabama","description":"Montgomery"}, 
          {"value":"Georgia","description":"Atlanta"}, 
          {"value":"Mississippi","description":"Jackson"}, 
          {"value":"Louisiana","description":"Baton Rouge"}, 
          {"value":"Texas","description":"Ausint"} 
          ] 
    } 
] 
+1

Grazie!Non riesco ancora a spiegare perché ng-options non ha funzionato per me, ma grazie al tuo post ho creato l'elenco delle opzioni con ng-repeat e funziona bene! – Edward