8

ho questo angolare selezionare:angolari selezionare e NG-opzioni

<select ng-model='obj.status' ng-options='status.code as (status.code + " " + status.phrase) for status in status_codes.data track by status.code'>` 

mio $scope.status_codes è come questo:

data: [ 
{ 
     "code":"100", 
     "phrase":"...", 
     "spec_title":"RFC7231#6.2", 
     "spec_href":"http://tools.ietf.org/html/rfc7231#section-6.2" 
} 
... 
] 

mio $scope.obj.status viene aggiornato a "300" o "100" o qualsiasi altra cosa, come Cambio la mia selezione, ma la visualizzazione selezionata è sempre vuota. Quindi, il modello si aggiorna al valore selezionato dell'ingresso di selezione ma l'input non mostra il valore attualmente selezionato, mostra un elemento vuoto.

Se modifico le opzioni ng da ng-options='status as (status.code ...', funziona, ma desidero solo status.code nel mio modello, non nell'intero array di stato. Cosa dà?

devo {{obj | json }} nel mio HTML e si legge:

obj = { 
    "name": "", 
    "description": "", 
    "payload": "", 
    "status": "200", 
    "responseHeaders": { 
    "entry": [ 
     { 
     "key": "", 
     "value": "" 
     }, 
     { 
     "key": "", 
     "value": "" 
     } 
    ] 
    } 
} 
+0

Sei sicuro che stai aggiornando a "" 300 "' e non a '300'? – tymeJV

+0

Io sono, vedi la mia modifica. – mikeb

risposta

5

Rimuovere traccia.

Dal Docs:

prestare attenzione quando si utilizza selezionare come e tenere traccia dal nella stessa espressione.

La mia ipotesi migliore è che il come usa un valore normale, come "300", ma la traccia sta usando un valore digitato, come "int: 300". Rimozione di uno o l'altro dovrebbe farlo, preferibilmente la pista da.

Essi stanno dando questo come esempio:

questo funzionerà:

<select ng-options="item as item.label for item in items track by item.id" ng-model="selected"></select> 

ma questo non funzionerà:

<select ng-options="item.subItem as item.label for item in items track by item.id" ng-model="selected"></select> 
+0

Non sai cosa sta succedendo esattamente, ma la rimozione della traccia funziona. – mikeb

+0

@ mikeb Ho avuto questo problema molto quando ho iniziato. leggere i documenti aiuta sempre (la maggior parte dei metodi angolari sono ben documentati ...). Guarda la modifica, c'è una linea definita di ciò che funziona e cosa non lo fa. – Amit

1

Secondo la documentazione qui: https://docs.angularjs.org/api/ng/directive/ngOptions:

select as label for value in array 

Quindi nel tuo esempio, questo dovrebbe funzionare (si otterrà il valore codice come selezionare il valore in modello):

status.code as (status.code + " " + status.phrase) for status in status_codes.data 

track by deve essere utilizzato quando si dispone di oggetto come valore nel modello, matrice di oggetti per le opzioni e desideri abbinare il valore del modello corrente a uno degli oggetti nella matrice.