Please check the code below,
angular.module('myApp', []).controller('myController', ['$scope',
function($scope) {
setTimeout(function() {
$scope.policies = [{
drivers: [{
gender: 'M'
}, {
gender: 'F'
}]
}, {
drivers: [{
gender: 'M'
}, {
gender: 'F'
}]
}];
$scope.$apply();
}, 1000)
}
]);
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.js"></script>
<div ng-app='myApp'>
<div ng-controller='myController'>
<div ng-repeat='policy in policies'>
<div ng-repeat='driver in policy.drivers'>
Gender : M
<input type='radio' name='driverGender{{$index}}{{$parent.$index}}' value='M' ng-model='driver.gender' />F
<input type='radio' ng-model='driver.gender' name='driverGender{{$index}}{{$parent.$index}}' value='F' />
</div>
</div>
</div>
</div>
I was trying to achieve a pair of radio button inside 2 levels of ng-repeat. I can check the radio button, the values changes as expected. But if the values are assigned from control, only last pair of radio button get updated. When I change the version to 1.2.0, it works fine. Please check the sample below
angular.module('myApp', []).controller('myController', ['$scope',
function($scope) {
setTimeout(function() {
$scope.policies = [{
drivers: [{
gender: 'M'
}, {
gender: 'F'
}]
}, {
drivers: [{
gender: 'M'
}, {
gender: 'F'
}]
}];
$scope.$apply();
}, 1000)
}
]);
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.0/angular.js"></script>
<div ng-app='myApp'>
<div ng-controller='myController'>
<div ng-repeat='policy in policies'>
<div ng-repeat='driver in policy.drivers'>
Gender : M
<input type='radio' name='driverGender{{$index}}{{$parent.$index}}' value='M' ng-model='driver.gender' />F
<input type='radio' ng-model='driver.gender' name='driverGender{{$index}}{{$parent.$index}}' value='F' />
</div>
</div>
</div>
</div>
Is there something wrong there in the code or any alternative ?
Finally I found a solution.. Instead of 'driverGender{{$index}}{{$parent.$index}}'
I created function which return the same.
$scope.getRadioButtonName=function(index,parentIndex){
return 'gender'+index+parentIndex;
}
Check it below.
// Code goes here
angular.module('myApp', []).controller('myController', ['$scope',
function($scope) {
$scope.policies = [{
drivers: [{
gender: 'M'
}, {
gender: 'F'
}]
}, {
drivers: [{
gender: 'M'
}, {
gender: 'F'
}]
}];
$scope.getRadioButtonName=function(index,parentIndex){
return 'gender'+index+parentIndex;
}
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
<div ng-app='myApp'>
<div ng-controller='myController'>
<div ng-repeat='policy in policies'>
<div ng-repeat='driver in policy.drivers'>
Gender : M
<input type='radio' ng-model='driver.gender' name='{{getRadioButtonName($index,$parent.$index)}}' value='M' />F
<input type='radio' ng-model='driver.gender' name='{{getRadioButtonName($index,$parent.$index)}}' value='F' />
</div>
</div>
</div>
</div>