20

我想添加一个带有选项 AM、PM 和 angularjs 的 html 选择,我需要的是使选项的键和值相同:

<option value="AM">AM</option>
<option value="PM">PM</option>

我的 html 看起来像这样

<select ng-model="ampm" ng-options="k as v for (k , v) in ampms"></select>

我的控制器看起来像

  $scope.ampm = (new Date().getHours()) >= 12 ? 'PM' : 'AM';
  $scope.ampms ={"AM":"AM","PM":"PM"};

一切正常。

我的问题是为什么当我使用数组(我尝试了 ng-options 中的所有选项)时我不能拥有相同的东西

$scope.ampms =["AM","PM"];

我做什么我总是得到这个

<option value="0">AM</option>
<option value="1">PM</option>

我想要的是使用像上面这样的数组,该选项具有相同的键和值。

4

3 回答 3

26

使用 AngularJS,您无需担心选项的值是什么。我见过的所有选择的ng-options值都是 0 到任何值。如果您只是在寻找带有两个选项的下拉菜单,它可以很简单

<select ng-model="ampm" ng-options="currOption for currOption in ['AM', 'PM']"></select>

http://jsfiddle.net/EyBVN/1/

于 2012-12-04T00:04:03.107 回答
10

这是 Angular 中 ng-options 的默认行为。如果不指定键名,Angular 会自动选择使用索引而不是键。执行此操作的代码可以在 Angular 的 Github 存储库的 /src/ng/directives/select.js 中的第 405 行看到。

它甚至不能被“值作为值中(索引,值)的值”强制。

但是由于 dnc253 只是用他的答案击败了我(它在我打字时出现了)......你不必担心它,Angular 会自动为你做这一切。

于 2012-12-04T00:15:30.583 回答
2

我确实找到了一种将特定数据放在选择选项值中的方法。您必须在 select 标签内的 option 标签中添加一个 ng-repeat 属性:

<select id="{{question.id}}" name="{{question.id}}" 
    class="{{question.inputclass}}" ng-required="question.required" 
    title="{{question.title}}">
  <option value=""></option>
  <optgroup ng-repeat="group in question.data" label="{{group.group}}">
    <option ng-repeat="item in group.data" value="{{item.value}}" 
        ng-selected="{{item.value == question.defaultValue}}">
          {{item.description}}
    </option>
  </optgroup>
</select>

作为奖励,我保留了选项组标签以作为每个人的示例。

question.data JSON

[
  {"group":"Canada","data":[{"value":"Ontario","description":"Toronto"},
                            {"value":"Quebec","description":"Quebec City"},
                            {"value":"Manitoba","description":"Winnipeg"}
                           ]
  },
  {"group":"Mexico","data":[{"value":"Jalisco","description":"Guadalajara"},
                            {"value":"Nayarit","description":"Tepic"}
                           ]
  },
  {"group":"United States of America","data":[
                            {"value":"Alabama","description":"Montgomery"},
                            {"value":"Georgia","description":"Atlanta"},
                            {"value":"Mississippi","description":"Jackson"},
                            {"value":"Louisiana","description":"Baton Rouge"},
                            {"value":"Texas","description":"Ausint"}
                           ]
  }
]
于 2014-01-17T01:19:54.693 回答