2015-11-05 3 views
0

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

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

// 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> 

ответ

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

Как бы я это делать, когда язык по умолчанию отличается для каждого местоположения I перебрать в родительском нг-повторить? – cj5

+0

Возможно, вы можете использовать значение $ index для установки значения по умолчанию. Это означает, что значение по умолчанию отражает текущий язык, но мое предложение состоит в том, что по умолчанию не предполагается «язык по умолчанию» - он просто по умолчанию препятствует тому, чтобы пустое пространство оставалось там. Другим вариантом было бы установить по умолчанию что-то вроде «Не выбран» или «Выберите язык» и сделать это первым вариантом в вашем списке. Затем отклоните отправку формы, если модель = «Не выбрано» –

+0

Хорошо, я попробовал то, что вы предложили ранее: ''. Я установил атрибут ng-model в selectedLanguage, который равен '{iso: 'eng', language: 'English'}', но он все еще ничего не выбирает. – cj5