当检查无线电时,Angular JS显示输入

时间:2014-07-30 22:12:52

标签: javascript html angularjs ng-show

我有一个像这样的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>

这很有效。在数组中,其中一个索引中有extraFieldtrue。当选中extraField设置的单选按钮时,我需要Angular显示额外的输入字段。数组可能会更改为具有多个extraField值的索引。

所以额外的字段看起来像这样。

<input type="text" ng-model="extraInfo" ng-show="howMany" />

除了知道使用ng-show之外,我不确定这样做的正确方法是什么。上面的例子当然没有做任何事情。

4 个答案:

答案 0 :(得分:1)

您可以使用ng-ifng-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'" ...>