varios validar validacion vacios formularios formulario controladores con campos angularjs

validar - AngularJS comprueba si la forma es válida en el controlador



validar formulario en angular (4)

Necesito verificar si un formulario es válido en un controlador.

Ver:

<form novalidate="" name="createBusinessForm" ng-submit="setBusinessInformation()" class="css-form"> <!-- fields --> </form>

En mi controlador:

.controller( ''BusinessCtrl'', function ($scope, $http, $location, Business, BusinessService, UserService, Photo) { if ($scope.createBusinessForm.$valid) { $scope.informationStatus = true; } ...

Me aparece este error:

TypeError: Cannot read property ''$valid'' of undefined


Aquí hay otra solución

Establezca una variable de ámbito oculto en su html y luego puede usarlo desde su controlador:

<span style="display:none" >{{ formValid = myForm.$valid}}</span>

Aquí está el ejemplo completo de trabajo:

angular.module(''App'', []) .controller(''myController'', function($scope) { $scope.userType = ''guest''; $scope.formValid = false; console.info(''Ctrl init, no form.''); $scope.$watch(''myForm'', function() { console.info(''myForm watch''); console.log($scope.formValid); }); $scope.isFormValid = function() { //test the new scope variable console.log(''form valid?: '', $scope.formValid); }; });

<!doctype html> <html ng-app="App"> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script> </head> <body> <form name="myForm" ng-controller="myController"> userType: <input name="input" ng-model="userType" required> <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> <tt>userType = {{userType}}</tt><br> <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> <tt>myForm.$valid = {{myForm.$valid}}</tt><br> <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> /*-- Hidden Variable formValid to use in your controller --*/ <span style="display:hidden" >{{ formValid = myForm.$valid}}</span> <br/> <button ng-click="isFormValid()">Check Valid</button> </form> </body> </html>


He actualizado el controlador a:

.controller(''BusinessCtrl'', function ($scope, $http, $location, Business, BusinessService, UserService, Photo) { $scope.$watch(''createBusinessForm.$valid'', function(newVal) { //$scope.valid = newVal; $scope.informationStatus = true; }); ...


Prueba esto

en vista:

<form name="formName" ng-submit="submitForm(formName)"> <!-- fields --> </form>

en el controlador:

$scope.submitForm = function(form){ if(form.$valid) { // Code here if valid } };

o

en vista:

<form name="formName" ng-submit="submitForm(formName.$valid)"> <!-- fields --> </form>

en el controlador:

$scope.submitForm = function(formValid){ if(formValid) { // Code here if valid } };


BusinessCtrl se inicializa antes del FormController createBusinessForm . Incluso si tiene el ngController en el formulario, no funcionará de la manera que desee. No puedes evitarlo (puedes crear tu ngControllerDirective y tratar de engañar a la prioridad). Así es como funciona angularjs.

Vea este plnkr por ejemplo: http://plnkr.co/edit/WYyu3raWQHkJ7XQzpDtY?p=preview