Search code examples
javascriptangularjsradio-buttonangular-ngmodel

Angular Material Radio Button model not updating


I am using an Angular Material radio group with an ng-repeat but for the life of me I cannot get the ng-model to update with selection. This is my current implementation but I have also tried ng-model="$parent.effectSelected"

Further down in the code I have a function when the user clicks a button and I use the value of the select for evaluation of next steps, but it is always logging as 'one', which I what I set it initially.

My HTML:

<md-radio-group ng-model="effectSelected" class="effect-radio-group">
  <md-radio-button class="effect-btn" ng-repeat="effect in effects" ng-value="effect.value">{{effect.name}}</md-radio-button>
</md-radio-group>

<md-button ng-click="checkSelection()">Evaluate</md-button>

My Controller JS:

   $scope.effects = [{'name':'None', 'value': 'one'},{'name':'Maybe', 'value': 'two'},{'name':'Yes', 'value': 'three'}];
   $scope.effectSelected = $scope.effects[0].value;
   $scope.checkSelection = function () {
       console.log($scope.effectSelected);
   }

Solution

  • Well, the problem its because u not encapsulate radio in a object. To work your code need do something like this:

    My HTML:

    <md-radio-group ng-model="effectSelected.selected" class="effect-radio-group">
      <md-radio-button class="effect-btn" ng-repeat="effect in effects" ng-value="effect.value">{{effect.name}}</md-radio-button>
    </md-radio-group>
    
    <md-button ng-click="checkSelection()">Evaluate</md-button>
    

    My Controller JS:

       $scope.effects = [{'name':'None', 'value': 'one'},{'name':'Maybe', 'value': 'two'},{'name':'Yes', 'value': 'three'}];
       $scope.effectSelected = { selected:'one'}
       $scope.checkSelection() = function () {
           console.log($scope.effectSelected.selected);
       }
    

    Hope this help you ;D