我有一个像这样的javascript数组:
$scope.quantityMachines = [
{ 'snippet' : 'One' },
{ 'snippet' : 'Two' },
{ 'snippet' : 'Three or more',
'extraField' : true },
{ 'snippet' : 'Not sure, need advice' }
];
然后我有一个由Angular JS使用数组生成的单选按钮列表:
<ul>
<li ng-repeat="quantity in quantityMachines">
<input type="radio" id="quantityMachines{{$index}}" name="quantityMachines" value="{{quantity.snippet}}" ng-model="howMany" />
<label for="quantityMachines{{$index}}">{{quantity.snippet}}</label>
</li>
</ul>
这很有效。在数组中,其中一个索引中有extraField
值true
。当选中extraField
设置的单选按钮时,我需要Angular显示额外的输入字段。数组可能会更改为具有多个extraField
值的索引。
所以额外的字段看起来像这样。
<input type="text" ng-model="extraInfo" ng-show="howMany" />
除了知道使用ng-show
之外,我不确定这样做的正确方法是什么。上面的例子当然没有做任何事情。
答案 0 :(得分:1)
您可以使用ng-if
和ng-show
组合以及范围变量来跟踪所选内容。 ng-if将确保文本框不会被不必要地添加到DOM和ng-show,以便在收音机切换时显示和隐藏。
在您的输入中: -
<input type="text" ng-model="extraInfo" ng-if="quantity.extraField" ng-show="option.selected === howMany" />
并在您的广播中添加ng-click="option.selected=quantity.snippet"
<ul>
<li ng-repeat="quantity in quantityMachines">
<input type="radio" id="quantityMachines{{$index}}" name="quantityMachines" value="{{quantity.snippet}}" ng-model="howMany" ng-click="option.selected=quantity.snippet"/>
<label for="quantityMachines{{$index}}">{{quantity.snippet}}</label>
<input type="text" ng-model="extraInfo" ng-if="quantity.extraField" ng-show="option.selected === howMany" />
</li>
</ul>
并添加到您的控制器中: -
$scope.option = { selected:'none'};
<强> Bin 强>
您甚至可以使用howMany
来跟踪所选内容,除非您需要将其设置为范围内对象的属性(因为ng-repeat创建了自己的子范围并且原始继承发挥作用)
因此,在您的广播中,只需添加ng-model="option.howMany"
,在您的控制器中添加$scope.option = { };
并在文本框中添加ng-if="quantity.extraField" ng-show="quantity.snippet === option.howMany"
<强> Bin 强>
答案 1 :(得分:0)
如果只有你有一个傻瓜...没有那个尝试这个
<ul>
<li ng-repeat="quantity in quantityMachines">
<input type="radio" id="quantityMachines{{$index}}" name="quantityMachines"
value="{{quantity.snippet}}" ng-model="howMany" />
<label for="quantityMachines{{$index}}">{{quantity.snippet}}</label>
<input type="text" ng-model="extraInfo" **ng-if="quantity.extraField"** />
</li>
</ul>
答案 2 :(得分:0)
http://jsbin.com/biwah/1/edit?html,js,output
<ul>
<li ng-repeat="quantity in quantityMachines">
<input type="radio" id="quantityMachines{{$index}}" name="quantityMachines" value="{{quantity.snippet}}" ng-model="howMany" />
<label for="quantityMachines{{$index}}">{{quantity.snippet}}</label>
<input type="text" ng-model="quantity.extraInfo" ng-show="quantity.extraField" />
</li>
</ul>
答案 3 :(得分:0)
选中单选按钮时显示内容的最简单方法如下:
假设您有一个广播组:ng-model="radio-values"
要显示或隐藏您的输入,则取决于广播组中的值:value="radio-value1"
,value="radio-value2"
要最终显示或隐藏输入字段(假设您想要在设置“radio-value1”时显示某些内容),您可以执行以下操作:
<input ng-show="radio-values == 'radio-value1'" ...>