¿Cuáles son las diferencias entre ng-pristine
y ng-dirty
? Parece que puedes tener ambos para ser true
:
$scope.myForm.$pristine = true; // after editing the form
La ng-dirty
clase te dice que el formulario ha sido modificado por el usuario, mientras que la ng-pristine
clase te dice que el formulario no ha sido modificado por el usuario. Así ng-dirty
y ng-pristine
son dos caras de la misma historia.
Las clases se establecen en cualquier campo, mientras que el formulario tiene dos propiedades $dirty
y $pristine
.
Puede usar la $scope.form.$setPristine()
función para restablecer un formulario a un estado prístino (tenga en cuenta que esta es una función de AngularJS 1.1.x).
Si desea un $scope.form.$setPristine()
comportamiento -ish incluso en la rama 1.0.x de AngularJS, necesita lanzar su propia solución (algunas bastante buenas se pueden encontrar aquí ). Básicamente, esto significa iterar sobre todos los campos de formulario y establecer su $dirty
marca en false
.
Espero que esto ayude.
pristine nos dice si un campo aún es virgen, y dirty nos dice si el usuario ya ha escrito algo en el campo relacionado:
Un campo que ha registrado un solo evento de keydown ya no es virgen (no más prístino) y, por lo tanto, está sucio para siempre.
fuente
Ambas directivas obviamente tienen el mismo propósito, y aunque parece que la decisión del equipo angular de incluir ambas interfiere con el principio DRY y se suma a la carga útil de la página, todavía es bastante práctico tenerlos a ambos alrededor. Es más fácil diseñar sus elementos de entrada, ya que tiene disponibles tanto .ng-pristine como .ng-dirty para diseñar en sus archivos css. Supongo que esta fue la razón principal para agregar ambas directivas.
fuente
.ng-pristine
y.ng-dirty
permitir un estilo CSS diferente: esta parece la razón más correcta detrás de la repeticiónComo ya se indicó en respuestas anteriores,
ng-pristine
es para indicar que el campo no se ha modificado, mientras queng-dirty
es para indicar que se ha modificado. ¿Por qué necesitar ambos?Digamos que tenemos un formulario con teléfono y dirección de correo electrónico entre los campos. Se requiere teléfono o correo electrónico, y también debe notificar al usuario cuando tenga datos no válidos en cada campo. Esto se puede lograr usando
ng-dirty
yng-pristine
juntos:fuente
ng-pristine ($ pristine)
Booleano Verdadero si el formulario / entrada aún no se ha utilizado ( no modificado por el usuario )
ng-dirty ($ sucio)
Booleano Verdadero si se ha utilizado el formulario / entrada ( modificado por el usuario )
$ setDirty (); Establece el formulario en un estado sucio. Se puede llamar a este método para agregar la clase 'ng-dirty' y establecer el formulario en un estado sucio (clase ng-dirty). Este método propagará el estado actual a los formularios principales.
$ setPristine (); Establece el formulario en su estado original. Este método establece el estado $ pristine del formulario en verdadero, el estado $ sucio en falso, elimina la clase ng-dirty y agrega la clase ng-pristine. Además, establece el estado $ enviado en falso. Este método también se propagará a todos los controles contenidos en este formulario.
Volver a establecer un formulario en un estado prístino suele ser útil cuando queremos 'reutilizar' un formulario después de guardarlo o restablecerlo.
fuente