# AngularJS 获取选中 radio 的值

AngularJS 获取 实时获取被选中的 radio 的值。

# 常规的获取方式

原生 js 获取 radio 选中的值的核心思想就是遍历所有的单选按钮,检测是否被选中,当某个单选按钮选中的时候,将它对应的值传递给我们赋值的参数,然后退出遍历循环。

<label> <input type="radio" name="sex" value="male" checked="checked" /></label>
<label> <input type="radio" name="sex" value="female" /></label>
<p>
  <button onclick="logValue()">打印</button>
</p>
// 核心函数
function getCheckedRadioValue(radioName) {
  let radios = document.getElementsByName(radioName)
  if (radios.length) {
    for (let i = 0; i < radios.length; i++) {
      if (radios[i].checked) {
        return radios[i].value
      }
    }
  } else {
    return undefined
  }
}
// 测试函数
function logValue() {
  console.log(getCheckedRadioValue('sex'))
}

# jQuery 的获取方式

jQuery 获取 radio 选中的值的方式有多种,比如:

<label> <input type="radio" name="phone" value="huawei" checked="checked" />华> </label>
<label> <input type="radio" name="phone" value="xiaomi" />小> </label>
<p>
  <button onclick="logValue()">打印</button>
</p>
function logValue() {
  console.log($('input:radio[name="phone"]:checked').val())
  console.log($('input:radio:checked').val())
  console.log($("input[type='radio']:checked").val())
  console.log($("input[name='phone']:checked").val())
}

另外,其中的 .val() 也可以换作 .attr('value')

# Angular 的获取方式

第一种使用方式:使用 ng-modelradio 绑到一个变量上,ng-value 使用表达式来表示值。选中时它的值就是 ng-value 的值了。

// pug 文件
div(ng-app="app", ng-controller="AppCtrl")
    input(type="radio", name="fruit", value="apple", ng-model="testValue")/ apple
    input(type="radio", name="fruit", value="banana", ng-model="testValue")/ banana
    input(type="text", name="result1", ng-model="testValue")/
var App = angular.module('app', [])
App.controller('AppCtrl', [
  '$scope',
  function($scope) {
    $scope.testValue = 'banana'
  },
])

在单选框中 ng-model 绑定输出的是 value 属性的值。

第二种使用方式:

// pug 文件
div(ng-app="app", ng-controller="AppCtrl")
    form(name="testForm")
        label(ng-repeat="fruit in fruits", for="{{fruit}}") {{fruit}}
            input(type="radio", name="fruit", ng-value="fruit", ng-model="test.testValue2", id="{{fruit}}")/
            input(type="text", name="result2", ng-model="test.testValue2")/
var App = angular.module('app', [])
App.controller('AppCtrl', [
  '$scope',
  function($scope) {
    // 为何此处只能为对象?
    $scope.test = {
      testValue2: 'banana',
    }
    $scope.fruits = ['apple', 'banana']
  },
])

第三种使用方式:在第二种方式的基础上,我们可以在 .pug 中通过 testForm.fruit.$modelValuetestForm.fruit.$viewValue 来获取选中的值。

其中 testFormform 元素的 name 属性的值,fruitinput 元素 name 属性的值。