Estoy actualizando programáticamente algunos de los campos en mi formulario con un valor y me gustaría establecer el estado del campo en $dirty
. Haciendo algo como:
$scope.myForm.username.$dirty = true;
no parece funcionar.
Hay un método $setPristine
que puedo usar para restablecer el estado del campo, pero no hay un$setDirty
método?
Entonces, ¿cómo se hace esto?
Vi esta publicación https://groups.google.com/forum/#!topic/angular/NQKGAFlsln4 pero parece que no puedo encontrar el $setDirty
método. Estoy usando la versión 1.1.5 de Angular.
$setDirty
a nivel de campo.Respuestas:
Desde AngularJS 1.3.4 puede usar
$setDirty()
en campos ( fuente ). Por ejemplo, para cada campo con error y marcado como obligatorio, puede hacer lo siguiente:fuente
En tu caso,
$scope.myForm.username.$setViewValue($scope.myForm.username.$viewValue);
funciona el truco: ensucia tanto el formulario como el campo, y agrega las clases CSS apropiadas.Para ser honesto, encontré esta solución en una nueva publicación en el tema del enlace de su pregunta. Funcionó perfectamente para mí, así que pongo esto aquí como una respuesta independiente para que sea más fácil de encontrar.
EDITAR:
La solución anterior funciona mejor para la versión Angular hasta 1.3.3. A partir de 1.3.4, debe usar el método API recién expuesto
$setDirty()
dengModel.NgModelController
.fuente
$scope.myForm.myField.$pristine = false; $scope.myForm.myField.$setViewValue(...)
. Parece que la respuesta a continuación que indica quefield.$setDirty()
se agregó en Angular 1.3.4 será la mejor solucióntendrá que configurar manualmente
$dirty
atrue
y$pristine
afalse
para el campo. Si desea que las clases aparezcan en su entrada, tendrá que agregarng-dirty
y eliminarng-pristine
clases manualmente del elemento. Puede usar$setDirty()
en el nivel de formulario para hacer todo esto en el formulario en sí, pero no en las entradas de formulario, las entradas de formulario no tienen actualmente$setDirty()
como mencionó.Esta respuesta puede cambiar en el futuro ya que deberían agregarse
$setDirty()
a las entradas, parece lógico.fuente
Si tiene acceso al NgModelController (solo puede acceder a él desde una directiva), puede llamar
fuente
Hice un jsFiddle solo para usted que resuelve este problema. simplemente establezca $ sucio en verdadero, pero con un
$timeout 0
modo que se ejecuta después de que se cargó DOM.Encuéntrelo aquí: JsFiddle
fuente
Esto es lo que funcionó para mi
fuente
Puedes usar el
$setDirty();
método. Ver documentación https://docs.angularjs.org/api/ng/type/form.FormControllerEjemplo:
fuente
Una función auxiliar para hacer el trabajo:
fuente
Angular 2
Para cualquiera que busque hacer lo mismo en Angular 2, es muy similar, además de obtener el formulario
fuente
Pequeña nota adicional a la respuesta de @ rmag. Si tiene campos vacíos pero obligatorios que desea ensuciar, use esto:
fuente
No estoy seguro de por qué está intentando marcar los campos como sucios, pero me encontré en una situación similar porque quería que aparecieran errores de validación cuando alguien intentaba enviar un formulario no válido. Terminé usando jQuery para eliminar las
.ng-pristine
etiquetas de clase y agregar.ng-dirty
etiquetas de clase a los campos correspondientes. Por ejemplo:fuente