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

Выбор AngularJS создает параметр со значением "? Object: null?" и не использует пустой параметр по умолчанию при привязке к нулевому значению

Здесь код выглядит как

<select ng-model="nullableInt">
  <option></option>
  <option value="0">First option</option>
  <option value="1">First option</option>
  <option value="2">First option</option>
</select>

Когда nullableInt равно null, сгенерированный html равен

<select ng-model="nullableInt">
  <option></option>
  <option value="? object:null ?"></option>
  <option value="0">First option</option>
  <option value="1">First option</option>
  <option value="2">First option</option>
</select>

Воспроизводится в plunkr здесь: http://plnkr.co/edit/05pBEMJppmkrn3nFgYdk?p=info

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

4b9b3361

Ответ 1

Обновление 3/29/2017:

Как заявил Хорхе Родригес душ Сантуш, это должно быть обработано по-другому для более новых версий angular. Ниже взята из текущей документации для angular 1.6.3

Необязательно, один жесткий код с установленным значением к пустой строке, может быть вложен в элемент. Эта элемент будет представлять нулевой или "не выбранный" вариант. Видеть пример ниже для демонстрации.

https://docs.angularjs.org/api/ng/directive/select


Angular создает новую опцию для представления нулевого значения. Он не нашел один из вариантов, которые вы предоставили в HTML.

Чтобы привязать к null, установите value = "null" в первом варианте

<option value="null"></option>

http://plnkr.co/edit/kzPVu4hiMcP6wA6crGYt?p=preview

Ответ 2

Принятый ответ не работает для меня, потому что мое свойство может быть пустым, нулевым или undefined. Если вы используете версию 1.3+, вы можете использовать getterSetter, чтобы принудительно использовать значение.

Я имел дело со строковыми значениями. Вам также придется обрабатывать 0 или другие допустимые значения фальши в функции.

$scope.nullableIntCoerced = function(n) {
    return arguments.length ? ($scope.nullableInt = n) : ($scope.nullableInt || "");
}

<select ng-model="nullableIntCoerced" ng-model-options="{getterSetter:true}">
    <option value=""></option>
    ...

https://code.angularjs.org/1.3.20/docs/api/ng/directive/ngModel

Ответ 3

Для более поздних версий Angularjs используйте <option value=""> - </option> для нулевого значения

Ответ 4

Ниже решение решило проблему для меня.

Проблема здесь, когда используется ng-model, добавляется опция по умолчанию со значением "?" и без использования ng-модели нельзя использовать ng-change для получения текущего выбора. Я действительно создал onChangeSelection(), в пределах которого мы можем установить свойство DefaultSelected, подобное ниже

$scope.onChangeSelection = function(id) {

    document.getElementById(id)[0].defaultSelected = true;
    $scope.selected = $('#'+id).val();
}

<select id="mySelect" ng-model="nullableInt" ng-options="option.value as option.text for option in arrayContents track by option.value"                    ng-change="{{onChangeSelection(id)}}" required>
    <option value="" ng-if="false"></option>
</select>

Это исключит параметр по умолчанию из списка опций, а также сделает первое значение по умолчанию выбранным.