2013-07-22 10 views
11

Dire che ho questo:Può un <select> essere associato a un array per indice in Angular.js?

$scope.items = ["foo", "bar", "baz"]; 
$scope.index = 1; 

Come si legano che a un <select>?

Ho provato: <select ng-model="index" ng-options="i for i in items"> ma è stata selezionata un'opzione vuota al momento del caricamento.

Questo: <select ng-model="items[index]" ng-options="i for i in items"> sembra funzionare inizialmente ma quando si modifica la selezione, il valore sugli elementi [indice] viene modificato, che ovviamente non è quello che vogliamo.

La mia soluzione è quella di mappare l'array alle coppie {num, title} ma quella logica ingombra il controller.

risposta

25

Provare quanto segue:

<select ng-model="index" ng-options="i as name for (i, name) in items"> 

Se si seleziona la ng-options documentation, vedrete una delle forme supportati è

selezionare come etichetta per valore in serie

  • Select è ciò che il valore del modello dovrebbe essere quando tale elemento è selezionato
  • etichetta è il testo da visualizzare

Abbiamo combinato che con l'(key, value) raggruppamento, che è possibile utilizzare per ottenere l'accesso alla chiave nell'oggetto (o in questo caso, indice nell'array).

Modifica: Sto vedendo lo stesso problema che stai vedendo. Un commento sui documenti angolari raccomanda questo approccio invece:

<select ng-model="index" ng-options="items.indexOf(item) as item for item in items"> 

Quale IMO non è così pulito, ma sembra funzionare.

+1

Non ottengo alcuna selezione iniziale con questo metodo anche se 'index = 1'. Durante il monitoraggio del valore ho scoperto che quando viene effettuata una selezione, 'index' diventa l'indice come una stringa' index = "1" '. Forse c'è un disallineamento di tipo? –

+0

Grazie per la modifica, il gioco è fatto! Forse non è così bello, ma batte equamente il controller con un margine equo. –

+0

@sjmulder tieni a mente che '[] .indexOf' non è presente in IE8 nel caso tu debba supportarlo :( –

Problemi correlati