Питання id як ng-модель для вибору в 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);
    }
}]);    

Як це зробити? поле оповіщення, яке відображає значення як "невизначене".


10
2017-09-19 14:05


походження




Відповіді:


ng-options візерунки можуть збити з пантелику, щоб почати роботу, оскільки існує цілком купа.

Те, що ви зараз написали, означає:

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

Отже, змінні, які ви маєте у своєму вираженні, є всіма, які ви визначили в області обсягу, а також контекстуально specialty змінна Коли ви виберете щось, він призначить його select, що справді є undefined.

Те, що ви шукаєте, є

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

Це буде встановлювати значення того, що ng-model вказує на контекстне specialtyс lookupId


23
2017-09-19 14:17



Це працює саме те, що мені потрібно завдяки. - Praveen Reddy
У моєму випадку (Angular 1.2.15) я мав вираз правильно, але я необов'язково використовував вираз "track by", який, очевидно, порушує його і змушує модель відслідковувати весь об'єкт, а не значення / ідентифікатор ви Вибрати. Частково це пов'язано з відсутністю документації та, можливо, виправленням у нових версіях Angular; див. проблему GitHub: github.com/angular/angular.js/issues/6564. - Jordan Rieger
Офіційна документація на ngOptions дуже незрозуміла про використання as щоб визначити значення, встановлене на ngModel. Дякую за те, що думає про більш чіткий брат! :) - Felipe Leão


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

Так що ваш вибрати  ng-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>

3
2017-09-19 14:17



це таке ж, як і вище. Робочий Дякую. - Praveen Reddy