11

Ecco alcune informazioni di base. Ho appena aggiornato ad Angular 1.4. Sto usando un'API scritta in C# per le mie chiamate lato server.

Una sezione della mia pagina mostra 2 elenchi di selezione (Progetto & Sottoprogetto). Entrambi devono essere impostati su "(Select a ______)", che elencho come prima opzione di ogni selezione con "value" di 0. Le opportune variabili del modello ng sono inizializzate su 0.

Il codice HTML effettivo perché gli elenchi selezionati vengono generati sul lato server mediante concatenazione di stringhe, passati al client tramite $ http e inseriti utilizzando una direttiva che chiama $ compile (non ideale, ma il mio client mi ha praticamente incatenato a questa API) . Prima dell'aggiornamento 1.4, tutto funzionava bene.

Ora, la mia lista di selezione Progetto non ha valore. Quando ispeziono l'elemento, questo è quello che vedo ...

<select ng-change="updateSubProjList()" ng-model="curProjID"> 
    <option value="? number:0 ?"></option> 
    <option value="0">(Select a Project)</option> 
    <option value="1">First Project</option> 
    <option value="2">Second Project</option> 
    ... 
</select> 

... con quel primo "? Numero: 0?" la voce è quella attualmente selezionata. La mia lista di selezione del sottoprogetto si inizializza ancora bene, il che lo rende ancora più strano.

So che ci sono stati alcuni aggiornamenti per $ compilare nell'aggiornamento ad AngularJS 1.4, ma non riesco a capire una soluzione al mio problema. Qualsiasi assistenza sarebbe molto apprezzata.

+0

qual è il valore di 'curProjID'? –

+0

Inizializzato a 0 quando viene caricato il controller. – ThisLanham

risposta

20

Sembra che ci sia un cambiamento di 1,4 relativi a come l'opzione selezionata viene confrontato ngModel confrontando l'attributo value in <option value="0"> - è ora richiede utilizzare in modo esplicito una stringa per abbinare, piuttosto che permettere a un numero intero.

In realtà, il documentation afferma chiaramente:

Il valore di una direttiva select utilizzato senza ngOptions è sempre una stringa. Quando il modello deve essere associato a un valore non stringa, è necessario convertirlo esplicitamente utilizzando una direttiva ... o utilizzare ngOptions per specificare il set di opzioni.

Per fissare, modificare il valore inizializzato di $scope.curProjID ad essere una stringa:

 

$scope.curProjID = "0"; // instead of $scope.curProjID = 0; 

Quando non v'è alcuna corrispondenza (e non v'è, a meno che non si assegna una stringa "0"), aggiunge un select opzione "sconosciuta": <option value="? number:0 ?"></option>.

+0

Questo è assolutamente giusto. Grazie! Per chiunque si stia chiedendo, la mia seconda istruzione select ha funzionato perché le opzioni provenivano da e array di oggetti caricati usando "ng-options", al contrario di una gigantesca stringa concatenata. – ThisLanham

+1

Come correzione rapida ho appena modificato il binding del modello ng per includere "toString()"