我是AngularJS
的新手,我无法弄清楚如何生成<option> list
。
我想要的输出就像这个小提琴http://jsfiddle.net/XdpJv/
我目前的代码如下所示
<select data-ng-model="rateFilter" data-ng-change="filterStuff()">
<option selected="selected" value="">Show lowest rating</option>
<option value="{{rate}}" data-ng-repeat="rate in ratings">{{rate}}</option>
<option value="{{rate}}+" data-ng-repeat="rate in ratings">{{rate}}+</option>
</select>
评级变量看起来像[1 2 3]
,无法更改。如何在不改变评级变量的情况下实现这一目标?
答案 0 :(得分:0)
您应该使用ngOptions-directive来管理您的Select-Option。有时这有点棘手,但你应该总是尝试以有角度的方式制作它。您可以查看here它的工作原理。重要的是这一部分:
for array data sources:
label for value in array
select as label for value in array
label group by group for value in array
select as label group by group for value in array track by trackexpr
for object data sources:
label for (key , value) in object
select as label for (key , value) in object
label group by group for (key, value) in object
select as label group by group for (key, value) in object
您必须使用可能的评级来定义数组或对象,然后您的代码可能如下所示:
<select ng-model="ratings" ng-options="label for value in possible_ratings">
</select>
答案 1 :(得分:0)
您实际上想要在ng-options
标记上使用select
属性。 Angular使用所谓的“指令”劫持所有select
标记,并使用ng-options
属性中的表达式为select生成option
标记。你的表达式如下:
<select data-ng-model="rateFilter" data-ng-change="filterStuff()"
data-ng-options="rate for rate in ratings"></select>
for
之前的表达式成为选项的标签,for
之后的变量是对每个对象的引用,显然in
之后的变量就是你的数组。如果要为选项定义自定义value
,可以将表达式更改为
rate as rate+'%' for rate in ratings`
假设评级为百分比。如果您的数组实际包含对象,例如bracket
字段,您甚至可以使用
rate.percent as rate.percent+'%' group by rate.bracket for rate in ratings
有关select
指令和ng-options
属性的详细信息,请参阅docs。
基本上你正在看的内容是
for (i in ratings) {
rate = ratings[i];
// insert <option value="{{rate.percent}}">{{rate.percent}}%</option>
}
根据group by
的值,将rate.bracket
评级分为不同的数组,然后在<optgroup>
代码中为每个数组添加选项。