Javascript Angularjs 1.5.8-ng重复2级内的单选按钮列表工作不正常

Javascript Angularjs 1.5.8-ng重复2级内的单选按钮列表工作不正常,javascript,angularjs,angularjs-ng-repeat,radiobuttonlist,angularjs-1.5,Javascript,Angularjs,Angularjs Ng Repeat,Radiobuttonlist,Angularjs 1.5,请检查下面的代码 angular.module('myApp',[]).controller('myController',['$scope', 职能($范围){ setTimeout(函数(){ $scope.policies=[{ 司机:[{ 性别:'M' }, { 性别:“F” }] }, { 司机:[{ 性别:'M' }, { 性别:“F” }] }]; $scope.$apply(); }, 1000) } ]); 性别:M F 您应该创建一个循环,并将您想要的值分配给所有这些循环

请检查下面的代码

angular.module('myApp',[]).controller('myController',['$scope',
职能($范围){
setTimeout(函数(){
$scope.policies=[{
司机:[{
性别:'M'
}, {
性别:“F”
}]
}, {
司机:[{
性别:'M'
}, {
性别:“F”
}]
}];
$scope.$apply();
}, 1000)
}
]);

性别:M
F

您应该创建一个循环,并将您想要的值分配给所有这些循环:

angular.forEach($scope.policies, function(policy) {
   angular.forEach(policy.drivers, function(driver) {
     driver.gender = "M";
   });
});

希望能有所帮助。

我认为唯一的问题是单选按钮名称存在冲突,因此如果您将单选按钮代码替换为以下代码:

    <input type='radio' name='driverGender{{$index}}{{$parent.$index}}0' value='M' ng-model='driver.gender' />F
    <input type='radio' ng-model='driver.gender' name='driverGender{{$index}}{{$parent.$index}}1' value='F' />
F
请参考plnkr了解工作演示:

我个人在这个问题上花了2-3个小时,没有找到这个问题的真正原因。我得到的唯一一件事是,这个东西开始在角度版本刹车

更改日志是

注意:此答案不提供此问题的实际原因

为了解决这个问题,考虑从代码< >输入[type=无线电] 字段中删除<代码>名称>代码>字段,因为无线电工作正常,只是使用相同的<代码> NG模型< /> >,根据DOCS,<代码>名称< /代码>也是可选的。p>
angular.module('myApp',[]).controller('myController',['$scope',
职能($范围){
setTimeout(函数(){
$scope.policies=[{
司机:[{
性别:'M'
}, {
性别:“F”
}]
}, {
司机:[{
性别:'M'
}, {
性别:“F”
}]
}];
$scope.$apply();
}, 1000)
}
]);

{{policies | json}}


性别:M F
我终于找到了解决办法。。我创建了返回相同的函数,而不是
'driverGender{{$index}}{{$parent.$index}}

$scope.getRadioButtonName=function(index,parentIndex){
  return 'gender'+index+parentIndex;
}
请在下面查看

//代码在这里
角度.module('myApp',[]).controller('myController',['$scope',
职能($范围){
$scope.policies=[{
司机:[{
性别:'M'
}, {
性别:“F”
}]
}, {
司机:[{
性别:'M'
}, {
性别:“F”
}]
}];
$scope.getRadioButtonName=函数(索引,父索引){
返回“性别”+索引+父索引;
}
}
]);

性别:M
F

不要将
设置超时
用于角度,请使用
$timeout
。也就是说,这段代码中的任何超时都没有意义。实际上,我的服务正在返回数据。为了使它异步,我使用了timeout。在这个示例中,您将生成两对单选按钮,并将它们全部指定给同一个模型。但是,模型没有在控制器上定义,因此ng repeat的每次迭代都将建立它自己的模型副本,这将使从控制器更改模型变得不可能。“模型没有在控制器上定义”-我相信您提到的是模型在超时时被更改。即使我删除超时,结果也是一样的。请检查-好问题!昨天我花了一个小时想弄清楚到底是怎么回事。我唯一得到的是,这种行为在发行版中被改变了。我不明白。模型已经存在。我为什么要重复这个?请解释一下,正如@Claies在评论中所说的那样。模型在ng repeat中,因此每次迭代都会创建模型的副本,而最后一次迭代是将其值分配给模型的迭代,这就是为什么当您更改控制器中的值时,只有最后一次单选按钮才能获得新值的原因。我希望这能为你解释一下。对不起,英语不好……我不这么认为。如果我像Harpreet提到的那样删除name属性,它将起作用。但是现在制表成为一个问题。这是可行的。但是由于一个组中的单选按钮有不同的名称,浏览器将把它视为单独的组。在这种情况下,默认的制表行为将不起作用。如果删除名称属性,浏览器不会将单选按钮M&F视为一个组。默认的选项卡行为()不起作用。