Как установить выбранную опцию, используя angularjs ng-options и ng-model, используя строгую?

0

Все перечислены в порядке, и у меня есть значение по умолчанию, установленное в модели, но кажется, что он просто не хочет использовать это как параметр по умолчанию в элементе select. Как добиться того, чтобы модель выбрала значение iso соответствующего языка? Кроме того, как мне сохранить пустую опцию, добавляемую к элементу?

Пример данных:

// list of languages
[
 {"iso":"abk","language":"Abkhazian"},
 {"iso":"aar","language":"Afar"},
 {"iso":"afr","language":"Afrikaans"},
  ...
]

// location object containing the property for the language value
{
    "id":"516",
    "site":"Al Seela",
    "start_utc":"03:00:00",
    "end_utc":"06:00:00",
    ...
    "lang_iso":"eng",
    "language":"English"
}

Разметка:

<div ng-controller="StationListController as stationList" ng-init="init()">
    ...
    <div ng-repeat="location in station.locations" class="panel panel-default">
    ...
        <select class="form-control" id="{{'locationLang-' + location.id}}" ng-model="location.lang_iso" ng-options="lang.iso as lang.language for lang in locLanguages track by lang.iso"></select>

JS:

$scope.init = function () {
    $http.get($scope.ajaxurl + '?_mode=languages&_task=list').success(function(data, success) {
        $scope.locLanguages = data;
    }).error(function(error) {});
};

Результат:

<select ng-options="lang.iso as lang.language for lang in locLanguages track by lang.iso" ng-model="location.lang_iso" id="locationLang-844" class="form-control ng-pristine ng-valid ng-touched">
    <option value="?" selected="selected"></option>
    <option value="abk" label="Abkhazian">Abkhazian</option>
    <option value="aar" label="Afar">Afar</option>
    <option value="afr" label="Afrikaans">Afrikaans</option>
    ...
</select>
Теги:
angularjs-ng-model
ng-options
html-select

1 ответ

1
Лучший ответ

Единственный способ исправить проблему с пустым параметром - назначить значение по умолчанию в вашем контроллере. В наши дни довольно стандартно использовать первое значение, поэтому просто обновите свой $scope.init чтобы:

$scope.init = function () {
    $http.get($scope.ajaxurl + '?_mode=languages&_task=list').success(function(data, success) {
        $scope.locLanguages = data;
        $scope.location.lang_iso = {"iso":"abk","language":"Abkhazian"}; // or perhaps the entire object
    }).error(function(error) {});
};
  • 0
    Как бы это сделать, если язык по умолчанию отличается для каждого местоположения, которое я перебираю в родительском ng-repeat?
  • 0
    Возможно, вы могли бы использовать значение $ index, чтобы установить значение по умолчанию. Это заставит значение по умолчанию отражать текущий язык, но я предлагаю, чтобы значение по умолчанию не предназначалось для «языка по умолчанию» - это просто значение по умолчанию, которое препятствует тому, чтобы в противном случае было пустое пространство. Другой вариант - установить по умолчанию что-то вроде «Не выбран» или «Пожалуйста, выберите язык» и сделать это первым вариантом в вашем списке. Затем отклоните отправку формы, если модель = "Не выбрано"
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню