2014-09-19 13 views
9

Non ricevo il valore id del valore dell'opzione dell'elemento selezionato del tag.id come ng-model per select in angularjs

<div ng-controller="UserCreationCtrl"> 
    <form novalidate="novalidate" class="form-horizontal"> 
     <div class="control-group"> 
      <label class="control-label" for="inputFirstName">First name:</label> 

      <div class="controls"> 
       <input type="text" id="inputFirstName" ng-model="doctor.firstName" placeholder="First name"/> 
      </div> 
     </div> 

     <div> 
      <span class="nullable"> 
       <select ng-model="user.lookupId" ng-options="select as speciality.lookupName for speciality in specialityList" ng-change="selectedSpecilaty()"> 
        <option value="">-- choose speciality --</option> 
       </select> 
      </span> 
     </div> 
    </form> 
</div> 

mio regolatore

app.controller('UserCreationCtrl', ['$scope', 
    function ($scope) { 

    $scope.specialityList = [ 
           {lookupId : 1, lookupName: 'speciality1'}, 
           {lookupId : 2, lookupName: 'speciality2'}, 

           {lookupId : 4, lookupName: 'speciality6'}, 
           {lookupId : 3, lookupName: 'speciality3'} 
           ]; 

    $scope.user = {firstName: 'first name value', lookupId : 4}; 

    $scope.selectedSpecilaty = function() 
    { 
     alert($scope.user.lookupId); 
    } 
}]);  

Come posso fare questo. la casella di avviso che indica il valore come "non definito".

risposta

21

ng-options i motivi possono essere fonte di confusione per iniziare, in quanto ci sono un bel po '.

Quello che hai scritto significa in questo momento:

select  as  speciality.lookupName for speciality in specialityList 
^-- the value to set to ^-- what to display  ^-- iteree name ^-- iterables 

Quindi le variabili che avete a disposizione nell'espressione sei everythin è stato definito sulla portata e la specialty variabili contestuale. Quando selezioni qualcosa, lo assegnerà a select, che è effettivamente undefined.

Quello che stai cercando è

ng-options="speciality.lookupId as speciality.lookupName for speciality in specialityList" 

Questo imposterà il valore di ciò che ng-model sta indicando ai specialty contestuali l' lookupId

+1

Questo funziona esattamente ciò di cui ho bisogno grazie. –

+1

Nel mio caso (Angular 1.2.15) avevo l'espressione giusta, ma stavo usando l'espressione "track by" alla fine inutilmente, che apparentemente la spezza e fa sì che il modello segua l'intero oggetto piuttosto che il valore/ID stai selezionando. Ciò è in parte dovuto alla mancanza di documentazione e probabilmente corretto nelle versioni più recenti di Angular; vedere il problema GitHub: https://github.com/angular/angular.js/issues/6564. –

+0

La documentazione ufficiale su ngOptions non è chiara sull'uso di 'as' per definire il valore impostato su ngModel. Grazie per aver pensato, fratello più chiaro! :) –

3

Devi cambiare la chiave select che si riferisce a la chiave value specificata nel numero ng-options. Dal momento che la chiave è valuespecialità quindi di legarsi user.lookupId al vostro ng-model con del lookupId, devi cambiare selezionare l'opzione attualmente selezionata a specialty.lookupId

Così il vostro select'sng-options dovrebbe essere:

<select ng-model="user.lookupId" ng-options="speciality.lookupId as speciality.lookupName for speciality in specialityList" ng-change="selectedSpecilaty()"> 
    <option value="">-- choose speciality --</option> 
</select> 
+0

questo è come sopra. Lavoro. Grazie. –

Problemi correlati