Подтвердить что ты не робот

AngularJS 1.3.0 больше не показывает выбор по умолчанию, когда ng-options ссылаются на другую модель из выбранной ng-модели

Моя форма select и ng-options отлично работала на AngularJS 1.2.26, всегда отображая выбор по умолчанию, если toy.toy_container_name был доступен в массиве containers. Однако после обновления до 1.3.0 выпадающее меню выбора больше не показывает выбор по умолчанию (такое же поведение в Chrome, FF и Safari, а не проблема с браузером). Мой тест Selenium поймал это, и теперь я озадачен тем, почему. 1.3.0, похоже, не имеет каких-либо отклонений или заметных изменений (из 1.2.6), которые могут привести к этой проблеме. Кроме того,

<select class="form-control" ng-model="toy.toy_container_name" ng-options="c.container_name as c.container_name for c in containers" required>
        <option value="">- Pick Container -</option>
</select>

Дальнейшее выполнение этого смешения - проверка источника показывает правильный выбор; однако в поле выбора выпадающего меню не отображается выбранное значение по умолчанию:

Инспектор Chrome Elements:

<option value="" class="">- Pick Container -</option>
<option value="0">A-BIN</option>
<option value="1" selected="selected">B-BIN</option>
<option value="2">F-BIN</option>
<option value="3">G-BIN</option>

EDIT: я нашел проблему:

Зачем нужно перемещать '$ scope.toy = toy;' после извлечения для контейнеров разница в новом Angular 1.3.0?

$http({method: 'GET', url:'/toys/'+$stateParams.id}).success(function(toy, status, headers, config) {

        $scope.original = angular.copy(toy);
        //$scope.toy = toy; // WORKED in AngularJS 1.2.26 but not 1.3.0

        $http({method: 'GET', url:'/containers'}).success(function(containers, status, headers, config) {
            $scope.toy = toy; // moved from where previously commented; NOW works with AngularJS 1.3.0
            $scope.containers =  containers;
        }).error(errorMessage.onError);

}).error(errorMessage.onError);
4b9b3361

Ответ 1

Проблема - известная ошибка в ветки 1.3x. См. Здесь: https://github.com/angular/angular.js/issues/11835

Выберите контроллер, который не понимает, что параметры были изменены - необходимо вручную выполнить рендеринг.

Ответ 2

Я думаю, вам нужно подождать ответа с сервера, а затем отобразить DOM, посмотрите:

<div ng-if='toy'>
    <select class="form-control" ng-model="toy.toy_container_name" ng-options="c.container_name as c.container_name for c in containers" required>
        <option value="">- Pick Container -</option>
     </select>
</div>

(не toy, не render)

Ответ 3

Ну, я думаю, вы должны использовать ng-init, чтобы показать значение по умолчанию при загрузке.

<select class="form-control" ng-init="<value you want as default>" ng-model="toy.toy_container_name" ng-options="c.container_name as c.container_name for c in containers" required>
    <option value="">- Pick Container -</option>
</select>