Модель ng AngularJS для выбора не устанавливает атрибут selected=selected

У меня есть страница AngularJS для редактирования операций, но я не могу заставить ни один из ‹select› показывать текущее значение. Все остальные поля в форме показывают свои текущие значения, поэтому я не уверен, что делаю неправильно.

У меня есть заводская настройка с ngResource, это в моем контроллере.

// Supporting Data
SurgeryData.get({'accessToken':$rootScope.accessToken})
    .$promise.then(function(response){
        $scope.surgeryData = response.surgeryData;
    });

// Surgery Data
SurgeryServices.get({'surgeryId':$stateParams.surgeryId,'accessToken':$rootScope.accessToken})
    .$promise.then(function(response){
        $scope.surgeryDetails = response;

        $scope.formData.surgeryId = $scope.surgeryDetails.surgery.id;
        ...
        $scope.formData.surgeryStatus = $scope.surgeryDetails.surgery_status;
        ...

        $log.log( angular.toJson( $scope.formData.surgeryStatus ) );
        $log.log( angular.toJson( $scope.surgeryData.surgery_status ) );
    });

Это HTML-код статуса операции.

<select class="form-control" ng-model="formData.surgeryStatus" ng-options="status.name for status in surgeryData.surgery_status"></select>

и это то, что я получаю в консоли из моих двух журналов $

$scope.formData.surgeryStatus

{"id":16,"name":"Ready For Pick-Up"}

$scope.surgeryData.surgery_status

[{"id":13,"name":"Inventory Not On Site"},{"id":14,"name":"Inventory On Site"},{"id":16,"name":"Ready For Pick-Up"},{"id":15,"name":"Sterilized For Surgery"}]

У ‹выбора› в форме есть все параметры, но (для этого примера) Готов к самовывозу не выбран, и у меня есть пустой ? опция добавлена ​​в выбор

<select class="form-control ng-pristine ng-valid" ng-model="formData.surgeryStatus" ng-options="status.name for status in surgeryData.surgery_status">
    <option value="?"></option>
    <option value="0">Inventory Not On Site</option>
    <option value="1">Inventory On Site</option>
    <option value="2">Ready For Pick-Up</option>
    <option value="3">Sterilized For Surgery</option>
</select>

person mike    schedule 05.08.2014    source источник
comment
Вы действительно близки. Измените на ng-options=status как статус.имя для статуса в хирургии_статус. as позволит вам сказать, что хранится в ng-model. Другая проблема заключается в том, что это должен быть один и тот же указатель объекта. Таким образом, $scope.formData.surgeryStatus = $scope.surgeryData.surgery_status[2].   -  person Zack Argyle    schedule 06.08.2014


Ответы (1)


ng-init должен подойти.

Вид:

<select class="form-control ng-pristine ng-valid" ng-init="formData.surgeryStatus = selected" ng-model="formData.surgeryStatus" ng-options="status.name for status in surgeryData.surgery_status track by status.id">
   <option value="?"></option>
   <option value="0">Inventory Not On Site</option>
   <option value="1">Inventory On Site</option>
   <option value="2">Ready For Pick-Up</option>
   <option value="3">Sterilized For Surgery</option>
</select>

Модель просмотра:

$scope.selected = $scope.surgeryDetails.surgery_id;

ng-init найдет подходящее значение из ваших параметров и выберет его при загрузке. Обязательно установите свою ng-модель равной любому значению, которое вы хотите выбрать, что в данном случае выглядит как ваш идентификатор?

person jcc    schedule 05.08.2014
comment
Единственный способ, которым я смог заставить его работать, — это изменить ваш ответ и добавить его в отслеживание по статусу.id в конце ng-options. а также установите $scope.selected в $scope.surgeryDetails.surgery_status.id; - person mike; 06.08.2014
comment
Правильно, вы также должны отслеживать элементы, которые вы повторяете, хороший улов. Отличная работа над тем, чтобы заставить его работать самостоятельно. - person jcc; 06.08.2014