【问题标题】:Angularjs ngOption with array带有数组的Angularjs ng选项
【发布时间】:2012-11-21 11:45:05
【问题描述】:

我想添加一个带有选项 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>

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

【问题讨论】:

    标签: angularjs html-select


    【解决方案1】:

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

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

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

    【讨论】:

    • 我试过你列出的链接,仍然有相同的值 0,1 而不是 AM,PM
    • 既然您已经接受了答案,您明白我们在答案中所说的话吗? value 属性设置为什么并不重要。 Angular 将根据所选选项为您正确更新模型。
    • 如果表单的目标(服务器)需要一个字符串值而不是一个索引,这很重要。
    • @LachlanCotter Angular 并不是真正设计用于重新加载整个页面的表单提交。见stackoverflow.com/a/16945970/1014979
    【解决方案2】:

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

    甚至不能通过“value as value for (index, value) in values”来强制。

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

    【讨论】:

      【解决方案3】:

      我确实找到了一种方法,可以将特定数据放入选择的选项值中。您必须在 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.dataJSON 是:

      [
        {"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"}
                                 ]
        }
      ]
      

      【讨论】:

      • 谢谢!我仍然无法解释为什么 ng-options 对我不起作用,但是感谢您的帖子,我使用 ng-repeat 构建了选项列表,并且运行良好!
      猜你喜欢
      • 1970-01-01
      • 2020-03-31
      • 2015-10-20
      • 2017-09-28
      • 1970-01-01
      • 2016-02-25
      • 2016-07-31
      • 2017-08-22
      • 2014-07-04
      相关资源
      最近更新 更多