Parece que debería ser bastante fácil, pero no encuentro la respuesta. Tengo un formulario en el que necesito validar que se ha realizado una selección de un grupo de radio. Intenté usar el atributo 'requerido' en los botones de opción, pero cuando se valida el formulario, se queja a menos que se seleccionen todos los botones de opción (lo cual es imposible por diseño).
¿Cuál es la forma correcta de validar una selección de grupo de radio en AngularJS?
<form name="myForm" ng-submit="submitForm()" ng-controller="ExampleController">
<input type="radio" ng-model="color" value="red" required> Red <br/>
<input type="radio" ng-model="color" value="green" required> Green <br/>
<input type="radio" ng-model="color" value="blue" required> Blue <br/>
<tt>color = {{color | json}}</tt><br/>
<button type="submit">Submit</button>
</form>
Al hacer clic en el botón enviar en Plnkr se muestra el comportamiento.
fuente
ng-required
en lugar de simplementerequired
hacerlo. Gracias.Creo que lo que necesita es agregar un nombre para el grupo de radio, para una entrada de radio necesita un nombre para determinar a cuál pertenece, el enlace a continuación funciona con validación sin ng-required (la respuesta aceptada)
<input type="radio" name='group' ng-model="color" value="red" required> Red <br/> <input type="radio" name='group' ng-model="color" value="green" required> Green <br/> <input type="radio" name='group' ng-model="color" value="blue" required> Blue <br/>
http://plnkr.co/edit/LdgAywfC6mu7gL9SxPpC?p=preview
fuente
ng-model
atributo.$touched
o$dirty
deng-model
, pero hay una solución alternativa (al menos para$dirty
) dondeng-form
se puede anidar y hacer referencia. Vea una pregunta similar aquí - stackoverflow.com/questions/22181462/…Solución alternativa mediante directiva. La respuesta aceptada no me funcionó en Firefox (v 33.0).
La idea era establecer el atributo requerido en falso en todas las radios con un nombre de clase específico, al cambiar.
http://plnkr.co/edit/nbzjQqCAvwNmkbLW5bxN?p=preview
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Example - example-radio-input-directive-production</title> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min.js"></script> </head> <body ng-app="radioExample"> <script> angular.module('radioExample', []) .controller('ExampleController', ['$scope', function($scope) { $scope.myObject= {}; $scope.specialValue = { "id": "12345", "value": "green" }; $scope.submitForm = function() { alert('valid'); } }]) .directive('colorChoice', function() { return { restrict: 'E', template: '<div ng-repeat="c in colors"><input class="colorClass" type="radio" value={{c}} ng-model="myObject.color" required />{{c}}</div>', link: function(scope, element, attrs) { scope.colors = ['Red', 'Green', 'Blue']; element.on('change', function(){ $(".colorClass").attr("required", false); }); } } }); </script> <form name="myForm" ng-submit="submitForm()" ng-controller="ExampleController"> <color-choice></color-choice> <tt>color = {{myObject.color | json}}</tt><br/> <button type="submit">Submit</button> </form> </body> </html>
fuente
En mi caso, estaba usando la biblioteca de materiales angularJS y agregar un
required
atributo a la<md-radio=group>
etiqueta funcionó.fuente