Angularjs 使用简单数组init设置ng选项

Angularjs 使用简单数组init设置ng选项,angularjs,ng-grid,ng-options,Angularjs,Ng Grid,Ng Options,我对角度和ng选项有点困惑 我有一个简单的数组,我想用它初始化一个select。但是,我想要选项值=标签 script.js html 我得到的是: <option value="0">var1</option> <option value="1">var2</option> <option value="2">var3</option> var1 var2 var3 我想要的是: <option value=

我对角度和
ng选项有点困惑

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

script.js html

我得到的是:

<option value="0">var1</option>
<option value="1">var2</option>
<option value="2">var3</option>
var1
var2
var3
我想要的是:

<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>
var1
var2
var3
所以我试着:

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

您可以将
ng repeat
选项一起使用,如下所示:

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

当您提交
表单时
可以隐藏输入值



第三次尝试时,您的答案是正确的

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

请参见此处的工作示例:

诀窍在于AngularJS无论如何都会将键作为0到n的数字写入,并在更新模型时转换回来

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


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

您可以使用

<select ng-model="myselect">
    <option ng-repeat="o in options" ng-selected="{{o==myselect}}" value="{{o}}">
        {{o}}
    </option>
</select>

{{o}
使用ng selected,您可以预先选择该选项,以防myselect被预先填充

无论如何,我更喜欢这种方法而不是ng选项,因为ng选项只适用于数组。ng repeat也适用于类似json的对象。


<select ng-model="option" ng-options="o for o in options">
更改后,$scope.option将等于“var1”,即使您在生成的html中看到value=“0”


如果您按照以下方式进行设置,请选择:

<select ng-model="myselect" ng-options="b for b in options track by b"></select>

您将获得:

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

工作小提琴:

你离题了。你不明白说明书。他想在他的
select
中使用
value
。我理解了说明,但很可能他的意图是将“value”绑定到模型,并且由于AngularJs呈现标记的方式而误解了正在发生的事情。如果您使用angular获取select的值,则可以使用angular,但在我的情况下(即经典提交表单),值将是0,1,2,3,而不是var1,var2,var3I假设您绑定到模型,但是如果您只是使用AngularJS来呈现外部提交给angular的表单,那么请使用EpokK的解决方案。这只是我的问题,还是这是有史以来最复杂和不清楚的语法?如果您仔细阅读了我的答案,检查我的新解决方案。
ng选项
也适用于对象数据源。尽管其他人给出了解决方法,但这个解决方案是迄今为止最优雅的,接近于旧的html样式,同时适用于角度模型绑定和表单submital。谢谢ng selected不需要把手,因为它是一个角度指令。非常好的解决方案。这个解决方案是唯一一个对我有效的选择字符串数组中的初始值的解决方案。是的,这应该是答案,轨迹对我来说很神奇。在遵循上述解决方案后,我最不期待,但这是一个简单的解决方法
<select ng-model="myselect" ng-options="b for b in options track by b"></select>
<option value="var1">var1</option>
<option value="var2">var2</option>
<option value="var3">var3</option>