2014-09-19 8 views
9

ich nicht immer den ID-Wert des Optionswertes von ausgewähltem Elemente von Tag.id als ng-Modell für ausgewählte 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> 

Mein Controller

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); 
    } 
}]);  

Wie kann ich das tun. Die Alarmbox gibt den Wert als 'undefiniert' aus.

Antwort

21

ng-options Muster kann verwirrend sein, mit zu beginnen, da es durchaus ein Haufen sind.

Was du jetzt geschrieben bedeutet:

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

So die Variablen, die Sie im Ausdruck zur Verfügung haben, sind every Sie auf den Rahmen definiert haben, und die kontextuelle specialty variabel. Wenn Sie etwas wählen wird es zu select zuweisen, die in der Tat undefined ist.

Was Sie suchen ist

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

Dies wird den Wert gesetzt, was ng-model zeigt auf, um die kontextuelle specialty ‚s lookupId

+1

genau Dies funktioniert, was ich dank benötigen. –

+1

In meinem Fall (Angular 1.2.15) hatte ich den Ausdruck richtig, aber ich wurde mit dem „Track von“ Ausdruck am Ende unnötig, die es scheinbar bricht und bewirkt, dass das Modell nicht das gesamte Objekt zu verfolgen, als der Wert/ID du wählst. Dies ist teilweise auf fehlende Dokumentation zurückzuführen und möglicherweise in neueren Versionen von Angular korrigiert; Sehen Sie sich das GitHub-Problem an: https://github.com/angular/angular.js/issues/6564. –

+0

Die offizielle Dokumentation zu ngOptions ist sehr unklar, über die Verwendung von 'as' der Wert zu definieren, auf ngModel gesetzt wird. Danke, dass du dir Gedanken gemacht hast, klar, Bruder! :) –

3

Sie haben die select Schlüssel zu ändern, verweist Der Schlüssel value ist in Ihrer ng-options angegeben. Da Ihr value Schlüssel Spezialität ist dann user.lookupId zu Ihrem ng-model mit der aktuell ausgewählte Option des lookupId zu binden, Sie wählen zu specialty.lookupId

So Ihre select'sng-options sollte sich ändern müssen sein:

<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

Dies ist das gleiche wie oben. Arbeiten. Vielen Dank. –

Verwandte Themen