validar invalid formulario form custom before javascript angularjs forms form-editing

javascript - invalid - Usar $ dirty en angularjs para verificar cada vez que se edita un formulario



validar formulario angular 5 (1)

Intenté verificar cada vez que se edita mi formulario escribiendo algunos campos de él. Leí $ sucio que debería funcionar para esa tarea, pero no puedo entender lo que me estoy perdiendo aquí:

<!DOCTYPE html> <html lang="en"> <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div ng-app="myApp" ng-controller="formCtrl"> <form name = "myForm" novalidate> First Name:<br> <input type="text" ng-model="user.firstName"><br> Last Name:<br> <input type="text" ng-model="user.lastName"> <br><br> <button ng-click="reset()">RESET</button> </form> <p> is Form dirty? {{isDirty}}<p> <p>form = {{user }}</p> <p>master = {{master}}</p> </div> <script> var app = angular.module(''myApp'', []); app.controller(''formCtrl'', function($scope) { $scope.master = {firstName:"John", lastName:"Doe"}; $scope.reset = function() { $scope.user = angular.copy($scope.master); }; $scope.reset(); $scope.isDirty = $scope.myForm.$dirty; }); </script> </body> </html>

Estoy intentando hacer que la bandera isDirty sea verdadera cada vez que el usuario modifique el formulario. Gracias


Le faltan atributos de name en los campos de formulario que no habilitan la validación de formulario para esos campos. myForm agregar un nombre único para cada campo para que obtenga esos campos en el objeto myForm

Margen

<form name="myForm" novalidate> First Name:<br> <input type="text" name="firstName" ng-model="user.firstName"><br> Last Name:<br> <input type="text" name="lastName" ng-model="user.lastName"> <br><br> <button ng-click="reset()">RESET</button> </form>

También está accediendo myForm objeto myForm que no es más que un objeto de formulario, no estaré disponible hasta que el DOM sea procesado, $scope.myForm simplemente no estará definido en el momento de la activación del controlador, si realmente desea acceder a $scope.myForm desde entonces el controlador debe poner ese código en $timeout que ejecutará el código de la función $timeout en el próximo ciclo de resumen.

$timeout(function(){ $scope.isDirty = $scope.myForm.$dirty; });

Actualizar

No es necesario mantener un indicador isDirty separado (esto requeriría cambiar el indicador isDirty separado para reflejar cualquier cambio en myForm.$dirty flag). En su lugar, le sugiero que use $scope.myForm.$dirty directamente como indicador. Entonces use la expresión myForm.$dirty , y esta bandera cambiará a medida que la forma se ensucie.

Trabajando plunkr