AngularJS选项基于条件选择

时间:2016-04-01 14:04:27

标签: javascript html angularjs

我有一个<select>元素,它可能会根据条件设置一个默认的<option> - 如果另一个用户之前已经提交过该表单并创建了正在提交的对象,那么该条件就是这样。但是,我似乎无法将ng-if应用于Option元素(或任何标签),我发现很难找到解决方案。

目前,我的代码如下:

<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为真时才应设置所选选项 - 这意味着其他人之前已提交过该表单,因此该值已设置且只应显示。

3 个答案:

答案 0 :(得分:1)

您可以使用过滤器或更简单的选项,避免在ng-options上使用<select>属性,而在ng-repeat元素上使用<option>

我简化了你的代码以提供一个快速的例子(甚至因为我看不到循环部分......你简化了它并且丢失了一些东西?或者也许它就在周五下午我可以& #39;看到它:))

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

我希望即使有了简化,这个程序也很清楚。

答案 1 :(得分:1)

尝试使用ng-selected 例如:

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

答案 2 :(得分:0)

好的基于MarcoS的回答和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')和显示标签('v')的对象数组中重复。 ng-selected然后检查valueCheckingIfThisObjectHasBeenPreviouslySubmitted是否为true,以及当前item.k是否等于提交的值。