2014-09-19 6 views
9

Я не получаю значение id значения параметра для выбранного элемента тега.id as ng-model для 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> 

Мой контроллер

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

Как я могу это сделать. в поле предупреждения, в котором значение указано как «undefined».

ответ

21

ng-options шаблоны могут ввести в заблуждение, с чего начать, поскольку есть довольно много.

То, что вы написали прямо сейчас означает:

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

So переменные, которые вы имеете в наличии в выражении являются everythin вы определили на сферу, а также контекстную specialty переменной. Когда вы выберете что-то, он назначит его select, что действительно undefined.

Что вы ищете является

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

Это установит значение, что ng-model указывает на на контекстные specialty «ы lookupId

+1

Это работает именно то, что мне нужно. –

+1

В моем случае (Angular 1.2.15) у меня было правильное выражение, но я использовал выражение «track by» в конце без необходимости, что, по-видимому, прерывает его и заставляет модель отслеживать весь объект, а не значение/ID вы выбираете. Отчасти это связано с отсутствием документации и, возможно, исправлением в новых версиях Angular; см. проблему GitHub: https://github.com/angular/angular.js/issues/6564. –

+0

Официальная документация по ngOptions очень неясна в отношении использования 'as' для определения значения, установленного на ngModel. Спасибо за то, что думает более ясно, брат! :) –

3

Вы должны изменить select ключ, который ссылается ключ value, указанный в вашем ng-options. Так как ваш value ключ специальность затем связать user.lookupId к вашим ng-model с выбранным в данный момент опцион lookupId, вы должны изменить выбрать для specialty.lookupId

Так что ваш select'sng-options должен быть:

<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

это то же, что и выше. За работой. Благодарю. –

Смежные вопросы