我有一个<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
为真时才应设置所选选项 - 这意味着其他人之前已提交过该表单,因此该值已设置且只应显示。
答案 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
是否等于提交的值。