使用简单数组init的ng-options

Dra*_*agu 185 angularjs ng-grid ng-options

我对Angular和ng-options.有点困惑.

我有一个简单的数组,我想用它初始化一个选择.但是,我希望选项值=标签.

的script.js

$scope.options = ['var1', 'var2', 'var3'];
Run Code Online (Sandbox Code Playgroud)

HTML

<select ng-model="myselect" ng-options="o for o in options"></select>
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

<option value="0">var1</option>
<option value="1">var2</option>
<option value="2">var3</option>
Run Code Online (Sandbox Code Playgroud)

我想要的是:

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>
Run Code Online (Sandbox Code Playgroud)

所以我尝试过:

<select ng-model="myselect2" ng-init=0 ng-options="options[k] as v for (k,v) in options"></select>

<select ng-model="myselect3" ng-init=0 ng-options="b as b for b in options"></select>
Run Code Online (Sandbox Code Playgroud)

(但它不起作用.)

编辑:

我的表单是外部提交的,这就是为什么我需要'var1'作为值而不是0.

Jam*_*ies 299

你在第三次尝试中确实让它变得正确.

 <select ng-model="myselect" ng-options="o as o for o in options"></select>
Run Code Online (Sandbox Code Playgroud)

请参阅此处的工作示例:http: //plnkr.co/edit/xEERH2zDQ5mPXt9qCl6k?p = preview

诀窍在于AngularJS无论如何都将键写为从0到n的数字,并在更新模型时进行转换.

因此,HTML看起来不正确,但在选择值时仍会正确设置模型.(即AngularJS会将'0'翻译回'var1')

Epokk的解决方案也有效,但是如果您异步加载数据,您可能会发现它并不总是正确更新.当范围更改时,使用ngOptions将正确刷新.

  • 它只是我,或者这是有史以来最强大和不明确的语法? (65认同)
  • 我理解了这些说明,但很可能他的意图是将'值'绑定到模型上,并且误解了由于AngularJs呈现标签的方式而发生的事情. (10认同)
  • 如果你使用angular得到select的值,它会起作用,但在我的情况下(即经典提交表单),值将是0,1,2,3,而不是var1,var2,var3 (3认同)

Epo*_*okK 34

您可以使用ng-repeat具有option这样的:

<form>
    <select ng-model="yourSelect" 
        ng-options="option as option for option in ['var1', 'var2', 'var3']"
        ng-init="yourSelect='var1'"></select>
    <input type="hidden" name="yourSelect" value="{{yourSelect}}" />
</form>
Run Code Online (Sandbox Code Playgroud)

当您提交时,您form可以获得隐藏的输入值.


DEMO

ng-selected ng-repeat


iPi*_*rat 20

你可以用类似的东西

<select ng-model="myselect">
    <option ng-repeat="o in options" ng-selected="{{o==myselect}}" value="{{o}}">
        {{o}}
    </option>
</select>
Run Code Online (Sandbox Code Playgroud)

使用ng-selected,如果预填充了myselect,则会预先选择该选项.

我更喜欢这种方法而不是ng-options,因为ng-options只适用于数组.ng-repeat也适用于类似json的对象.

  • ng-selected不需要把手,因为它是一个角度指令.优秀的解决方 (3认同)

Ida*_*a N 20

如果您按以下方式设置选择:

<select ng-model="myselect" ng-options="b for b in options track by b"></select>
Run Code Online (Sandbox Code Playgroud)

你会得到:

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>
Run Code Online (Sandbox Code Playgroud)

工作小提琴:http://jsfiddle.net/x8kCZ/15/


Too*_*kit 10

<select ng-model="option" ng-options="o for o in options">
Run Code Online (Sandbox Code Playgroud)

更改后$ scope.option将等于'var1',即使你在生成的html中看到value ="0"

plunker