【问题标题】:How do I set selected option using angularjs ng-options and ng-model using a strict?如何使用 angularjs ng-options 和使用严格的 ng-model 设置选定选项?
【发布时间】:2015-11-05 23:42:43
【问题描述】:

一切都很好,我在模型中设置了默认值,但似乎它只是不想将其用作选择元素中的默认选项。如何完成让模型选择相应语言的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 html-select ng-options angularjs-ng-model


    【解决方案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) {});
    };
    

    【讨论】:

    • 如果我在父 ng-repeat 中循环的每个位置的默认语言都不同,我该怎么做?
    • 您可以使用 $index 值来设置默认值。这将使默认值反映当前语言,但我的建议是默认值不打算成为“默认语言” - 它只是一个默认值,可以防止空格出现。另一种选择是将默认设置为“未选择”或“请选择一种语言”,并将其设为列表中的第一个选项。如果model = "Not Selected"则拒绝表单提交
    • 好的,我尝试了您之前的建议:&lt;select id="locationLang" ng-model="selectedLanguage" ng-options="lang as lang.language for lang in languages track by lang.iso" class="form-control"&gt;&lt;/select&gt;。我将 ng-model 属性设置为 selectedLanguage 等于 {iso: 'eng', language: 'English'} 但它仍然没有选择任何东西。
    • 尝试 selectedLanguage = 'eng' 代替。这是一个小提琴:jsfiddle.net/jgentes/ehevd37b
    • 好吧,这行得通。他们网站上的文档非常混乱,因为实施起来不是很直观。谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 2023-04-09
    • 1970-01-01
    • 2016-03-08
    • 2017-12-31
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多