一尘不染

具有简单数组初始化的ng-options

angularjs

我对Angular和ng-options

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

script.js

$scope.options = ['var1', 'var2', 'var3'];

html

<select ng-model="myselect" ng-options="o for o in options"></select>

我得到的是:

<option value="0">var1</option>
<option value="1">var2</option>
<option value="2">var3</option>

我想要的是:

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>

所以我尝试了:

<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>

(但是没有用。)

编辑:

我的表单是从外部提交的,这就是为什么我需要’var1’作为值而不是0的原因。


阅读 212

收藏
2020-07-04

共1个答案

一尘不染

您的第三次尝试实际上是正确的。

 <select ng-model="myselect" ng-options="o as o for o in options"></select>

在此处查看工作示例:http :
//plnkr.co/edit/xEERH2zDQ5mPXt9qCl6k?p=preview

诀窍在于,AngularJS始终将键写为从0到n的数字,并在更新模型时转换回去。

结果,HTML看起来不正确,但是在选择值时仍然可以正确设置模型。 (即AngularJS会将“ 0”转换回“ var1”)

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

2020-07-04