2016-04-01 152 views
1

我有一个<select>元素,它可能会根据条件设置默认的<option> - 条件是如果其他用户先前已提交表单并创建了要提交的对象。然而,看起来我不能将ng-if应用到选项元素(或任何标签),我很难找出解决方案。AngularJS选项根据条件选择

目前,我的代码如下所示:

<select 
    id="someId" 
    ng-options="(item?'Yes':'No') for item in [true, false]" 
    class="someClass" 
    ng-class="someMethodToGetDynamicClass('this') 
    ng-model="myObject.thisOption" 
    ng-disabled="valueCheckingIfThisObjectHasBeenPreviouslySubmitted"> 
    <option ng-if="valueCheckingIfThisObjectHasBeenPreviouslySubmitted" selected>{{myObject.thisOption}}</option> 
</select> 

如果valueCheckingIfThisObjectHasBeenPreviouslySubmitted是真的所选选项应该只设置 - 这意味着其他人之前提交表单,因此值已定,只应被显示。

回答

1

您可以使用过滤器,或者更容易的选择,避免<select>ng-options属性,而是ng-repeat使用<option>元素

我简化代码提供了快速的例子(甚至是因为我看不到周期部分...你简化它,出事失去了什么?或者,也许这只是周五下午,我无法看到它:)

<select ng-options="item for item in items" ng-model="selectedItem"> 
</select> 

这将成为

<select ng-model="selectedItem"> 
    <option ng-repeat="item for item in items" ng-if="item === yourConditionVariableOrElse">{{item}}<option> 
</select> 

我希望程序很简单,即使是简单化。

+0

从我读过的,'ng-if'不能用于'

+0

确实可以使用它;)我纠正了错误,'ng-repeat'代替'ng-for' – Naigel

+0

这篇文章的顶部答案可能只是过时了吗? http://stackoverflow.com/questions/23755801/angular-ng-if-inside-option-element-and-ng-repeat-not-working – millerbr

1

尝试使用ng-selected
例如:

<option ng-selected="valueCheckingIfThisObjectHasBeenPreviouslySubmitted">{{myObject.thisOption}}</option> 

0

好吧基于马科斯的答案,Naigels建议使用ng-repeat,我想我已经解决了它,像这样:

<select 
id="someId" 
class="someClass" 
ng-class="someMethodToGetDynamicClass('this') 
ng-model="myObject.thisOption" 
ng-disabled="valueCheckingIfThisObjectHasBeenPreviouslySubmitted"> 
<option ng-repeat="item in [{'k':true, 'v':'Yes'}, {'k':false, 'v':'No'}] ng-selected="valueCheckingIfThisObjectHasBeenPreviouslySubmitted && item.k == myObject.thisOption" >{{item.v}}</option> 

ng-repeat现在重复存储要检查的值('k')的一组对象,以及一个显示实验室el('v')。 ng-selected然后检查valueCheckingIfThisObjectHasBeenPreviouslySubmitted是否为真,并且如果当前item.k等于提交的值。