首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS - select的值属性

AngularJS - select的值属性
EN

Stack Overflow用户
提问于 2012-12-10 23:12:49
回答 7查看 136.3K关注 0票数 72

源JSON数据为:

代码语言:javascript
复制
[
  {"name":"Alabama","code":"AL"},
  {"name":"Alaska","code":"AK"},
  {"name":"American Samoa","code":"AS"},
  ...
]

我试着

代码语言:javascript
复制
ng-options="i.code as i.name for i in regions"

但是我得到了:

代码语言:javascript
复制
<option value="?" selected="selected"></option>
<option value="0">Alabama</option>
<option value="1">Alaska</option>
<option value="2">American Samoa</option>

虽然我希望得到:

代码语言:javascript
复制
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AS">American Samoa</option>

那么,如何获取值属性并摆脱"?“项目?

顺便说一下,如果我将$scope.regions设置为静态JSON而不是AJAX请求的结果,则空条目将消失。

EN

回答 7

Stack Overflow用户

发布于 2012-12-11 04:33:13

您最初尝试的内容应该可以工作,但HTML并不是我们所期望的。我添加了一个选项来处理初始的“未选中项目”的情况:

代码语言:javascript
复制
<select ng-options="region.code as region.name for region in regions" ng-model="region">
   <option style="display:none" value="">select a region</option>
</select>
<br>selected: {{region}}

上面的代码生成了这个HTML:

代码语言:javascript
复制
<select ng-options="..." ng-model="region" class="...">
   <option style="display:none" value class>select a region</option>
   <option value="0">Alabama</option>
   <option value="1">Alaska</option>
   <option value="2">American Samoa</option>
</select>

Fiddle

即使Angular使用数字整数作为值,模型(即$scope.region)也会根据需要设置为AL、AK或AS。(当从列表中选择一个选项时,Angular使用该数值来查找正确的数组条目。)

当第一次学习Angular如何实现它的"select“指令时,这可能会让人感到困惑。

票数 75
EN

Stack Overflow用户

发布于 2012-12-10 23:36:17

除非您自己在ng-repeat中构建它们,否则您不能真正做到这一点。

代码语言:javascript
复制
<select ng-model="foo">
   <option ng-repeat="item in items" value="{{item.code}}">{{item.name}}</option>
</select>

但是..。这可能是不值得的。最好让它按设计的方式工作,让Angular来处理内部工作。Angular以这种方式使用索引,因此您可以实际使用整个对象作为值。因此,您可以使用下拉绑定来选择整个值,而不仅仅是一个字符串,这非常棒:

代码语言:javascript
复制
<select ng-model="foo" ng-options="item as item.name for item in items"></select>

{{foo | json}}
票数 26
EN

Stack Overflow用户

发布于 2014-07-30 22:26:00

如果使用track by选项,则会正确写入value属性,例如:

代码语言:javascript
复制
<div ng-init="a = [{label: 'one', value: 15}, {label: 'two', value: 20}]">
    <select ng-model="foo" ng-options="x for x in a track by x.value"/>
</div>

产生:

代码语言:javascript
复制
<select>
    <option value="" selected="selected"></option>
    <option value="15">one</option>
    <option value="20">two</option>
</select>
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13803665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档