AngularJS、ngRepeat 和默认选中单选按钮

Posted

技术标签:

【中文标题】AngularJS、ngRepeat 和默认选中单选按钮【英文标题】:AngularJS, ngRepeat, and default checked radio button 【发布时间】:2015-02-17 13:01:59 【问题描述】:

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

<div ng-repeat="i in [1,2,3]">
    <input type="radio" name="radioi" id="radioAi" value="A" checked> A
    <input type="radio" name="radioi" id="radioBi" value="B"> B
</div>

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

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

【问题讨论】:

【参考方案1】:

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

<div ng-repeat="i in [1,2,3]">
    <input type="radio" ng-attr-name="radioi" ng-attr-id="radioAi" value="A" checked> A
    <input type="radio" ng-attr-name="radioi" ng-attr-id="radioBi" value="B"> B
</div>

或使用ng-checked="true",以便在 ng-checked 指令扩展时应用检查属性。即示例

<input type="radio" name="radioi" ng-attr-id="radioAi" value="A" ng-checked="true"> A

<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="radioi" ng-attr-id="radioAi" value="A" checked> A
    <input type="radio" ng-attr-name="radioi" ng-attr-id="radioBi" value="B"> B
</div>
</div>

【讨论】:

谢谢!还应该注意的是,对于单选按钮和其他情况,如果您使用的是 ngModel,则不要使用 checked 或 ngChecked 属性。组中的每个单选按钮都应具有相同的 ngModel,其中包含应检查的单选按钮的值。 @user3071284 是的,您的代码中没有 ng-model .. :) 是的,这两种情况都需要某些属性才能正确运行。您的解决方案解决了我遇到的一种情况,并且从那里,我能够解决另一种情况。再次感谢!【参考方案2】:

这里milestone_data.index ==选择的猫id;

 <div  ng-repeat="category in catData.categories" > 
 <input type="radio" name="quality" id="category.title" ng-value="category.id" ng-model="milestone_data.index" >
  <span>category.title</span> 
 </div>

【讨论】:

以上是关于AngularJS、ngRepeat 和默认选中单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - 使用 ngRepeat 的下拉菜单

AngularJS - 如何获取 ngRepeat 过滤结果参考

使用angularjs中ngRepeat的$even与$odd属性时的注意事项

angularjs基础ng-repeat嵌套循环报错angular.min.js:89 Error: [ngRepeat:dupes]

AngularJS - 未选中单选按钮

使用AngularJS处理单选框和复选框的简单方法