AngularJS,ngRepeat和默认选中的单选按钮

use*_*284 7 radio-button angularjs ng-repeat angularjs-ng-repeat

使用ngRepeat时,可​​以使用以下代码创建3对单选按钮:

<div ng-repeat="i in [1,2,3]">
    <input type="radio" name="radio{{i}}" id="radioA{{i}}" value="A" checked> A
    <input type="radio" name="radio{{i}}" id="radioB{{i}}" value="B"> B
</div>
Run Code Online (Sandbox Code Playgroud)

由于某种原因,只有ngRepeat生成的最后一对单选按钮受checked属性影响.

这是因为AngularJS更新视图的方式吗?有办法解决吗?

PSL*_*PSL 12

这可能是因为当浏览器呈现单选按钮时(因为ng-repeat扩展),所有无线电都具有相同的名称,即"name="radio{{i}}"angular尚未扩展它,因此在所有无线电中都没有正确应用checked属性.因此,您需要使用,ng-attr-name以便稍后添加扩展名称属性.所以尝试: -

<div ng-repeat="i in [1,2,3]">
    <input type="radio" ng-attr-name="radio{{i}}" ng-attr-id="radioA{{i}}" value="A" checked> A
    <input type="radio" ng-attr-name="radio{{i}}" ng-attr-id="radioB{{i}}" value="B"> B
</div>
Run Code Online (Sandbox Code Playgroud)

或者使用ng-checked="true"以便在ng-checked指令扩展时应用checked属性.即例子

<input type="radio" name="radio{{i}}" ng-attr-id="radioA{{i}}" value="A" ng-checked="true"> A
Run Code Online (Sandbox Code Playgroud)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>

  
  <div ng-repeat="i in [1,2,3]">
    <input type="radio" ng-attr-name="radio{{i}}" ng-attr-id="radioA{{i}}" value="A" checked> A
    <input type="radio" ng-attr-name="radio{{i}}" ng-attr-id="radioB{{i}}" value="B"> B
</div>
</div>
Run Code Online (Sandbox Code Playgroud)