0

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

这行得通。在数组中,其中一个索引中有一个extraFieldwith 值true。当检查带有设置的广播按钮时,我需要Angular显示额外的输入字段extraField。数组可能会更改为具有多个索引extraField值。

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

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

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

4

4 回答 4

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'};

垃圾桶

您甚至可以使用howMany跟踪选择的内容,除非您需要将其设置为范围内对象的属性(因为 ng-repeat 创建了自己的子范围并开始使用原型继承)。

因此,在您的收音机中添加ng-model="option.howMany",在您的控制器中添加$scope.option = { };并在文本框中ng-if="quantity.extraField" ng-show="quantity.snippet === option.howMany"

垃圾桶

于 2014-07-30T22:39:19.490 回答
0

如果只有你有一个 plunker...没有那个试试这个

<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>
于 2014-07-30T22:28:47.220 回答
0

http://jsbin.com/biwah/1/edit?html,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>
    <input type="text" ng-model="quantity.extraInfo" ng-show="quantity.extraField" />
  </li>
</ul>
于 2014-07-30T22:33:43.420 回答
0

选中单选按钮时显示内容的最简单方法如下:

假设您有一个广播组:ng-model="radio-values"

显示或隐藏您的输入取决于无线电组中的值:value="radio-value1"value="radio-value2"

要最终显示或隐藏输入字段(假设您想在设置“radio-value1”时显示某些内容),请执行以下操作: <input ng-show="radio-values == 'radio-value1'" ...>

于 2016-09-09T08:03:40.620 回答