AngularJS组复选框验证

Pra*_*war 52 javascript jquery angularjs

我有一个复选框列表,其中至少有一个是强制性的.我试图通过AngularJS验证来实现这一点,但是很难.以下是我的代码:

// Code goes here for js 

var app = angular.module('App', []);

function Ctrl($scope) {
  $scope.formData = {};
  $scope.formData.selectedGender = '';
  $scope.gender = [{
    'name': 'Male',
    'id': 1
  }, {
    'name': 'Female',
    'id': 2
  }];
  $scope.formData.selectedFruits = {};
  $scope.fruits = [{
    'name': 'Apple',
    'id': 1
  }, {
    'name': 'Orange',
    'id': 2
  }, {
    'name': 'Banana',
    'id': 3
  }, {
    'name': 'Mango',
    'id': 4
  }, ];
  $scope.submitForm = function() {

  }
}
Run Code Online (Sandbox Code Playgroud)
// Code goes here for html
<!doctype html>
<html ng-app="App">

<head>
  <!-- css file -->
  <!--App file -->
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js"></script>
  <!-- External file -->
</head>

<body>
  <div ng-controller="Ctrl">
    <form class="Scroller-Container">
      <div ng-app>

        <form class="Scroller-Container" ng-submit="submit()" ng-controller="Ctrl">
          <div>
            What would you like?
            <div ng-repeat="(key, val) in fruits">
              <input type="checkbox" ng-model="formData.selectedFruits[val.id]" name="group[]" id="group[{{val.id}}]" required />{{val.name}}
            </div>
            <br />
            <div ng-repeat="(key, val) in gender">
              <input type="radio" ng-model="$parent.formData.selectedGender" name="formData.selectedGender" id="{{val.id}}" value="{{val.id}}" required />{{val.name}}
            </div>
            <br />
          </div>
          <pre>{{formData.selectedFruits}}</pre>
          <input type="submit" id="submit" value="Submit" />
        </form>
      </div>
      <br>
    </form>
  </div>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

以下是plunker中的代码:http://plnkr.co/edit/Bz9yhSoPYUNzFDpfASwt?p = preview 在AngularJS上有没有人这样做过?制作所需的复选框,强制我选择所有复选框值.AngularJS文档中也没有记录此问题.

Kla*_*r_1 101

如果要求选择组中的至少一个项目,则可以使用ng-required定义动态必需属性.

对于性别单选按钮,这很容易:

<input
    type="radio"
    ng-model="formData.selectedGender"
    value="{{val.id}}"
    ng-required="!formData.selectedGender"
>
Run Code Online (Sandbox Code Playgroud)

复选框组也很容易,如果你使用数组存储选定的水果(只是检查数组长度),但对于对象,有必要检查控制器中的过滤器或函数是否将任何值设置为true:

$scope.someSelected = function (object) {
  return Object.keys(object).some(function (key) {
    return object[key];
  });
}
Run Code Online (Sandbox Code Playgroud)
<input
    type="checkbox"
    value="{{val.id}}"
    ng-model="formData.selectedFruits[val.id]"
    ng-required="!someSelected(formData.selectedFruits)"
>
Run Code Online (Sandbox Code Playgroud)

更新:

const someSelected = (object = {}) => Object.keys(object).some(key => object[key])
Run Code Online (Sandbox Code Playgroud)

还要记住,如果值为0,它将返回false.