使用ngRepeat打开单选按钮上的ngModel

时间:2014-07-06 22:36:37

标签: javascript angularjs angularjs-ng-repeat angular-ngmodel

普兰克:http://plnkr.co/edit/Y4ntAj2fIIpexKjkCvlD?p=preview

我正在尝试构建一个表单组件,允许用户创建某个数据字段的多个实例,但是从同一组输入中填充它们。

我正在使用ng-repeat为集合中的每个项目创建一个单选按钮,然后每个单选按钮的值都设置为重复的$index。单选按钮在$scope.selectedItem上建模,用于将输入指向正确的项目。

但是,出于某种原因,selectedItem永远不会改变,即使单选按钮的选定状态也是如此。

我尝试使用静态单选按钮进行类似的操作并且工作正常,这让我相信ng-model中的ng-repeat存在问题。

1 个答案:

答案 0 :(得分:4)

您需要为每个按钮添加ngModel。然后,由于ngRepeat的每次迭代都会创建一个新的隔离范围,因此您有两种方法可以在父控制器中引用您的变量:

  1. selectedItem更改为对象。这是因为对象在JS中通过引用传递,而传递像你一样的原语并不适用于双向绑定。

  2. 添加$parent.selectedItem,它引用控制器中的范围变量selectedItem

  3. 在任何情况下,每个按钮都需要ngModel

    第一个选项:

    <input type='radio' 
           name='select' 
           id='{{$index}}' 
           ng-value='$index' 
           ng-model='$parent.selectedItem'/>
    

    Plunker Using $parent

    第二个选项:

    JS:

    $scope.selectedItem = {id: -1};
    

    HTML:

    <input type='radio' 
           name='select' 
           id='{{$index}}' 
           ng-value='$index' 
           ng-model='selectedItem.id'/>
    

    (以及在您引用selectedItemselectedItem.id

    的任何其他地方进行更改

    Plunker Using an object for selectedItem