105 votes

Angular.js en définissant par programme un champ de formulaire à sale

Je suis par programme la mise à jour de certains champs dans mon formulaire avec une valeur et je voudrais pour définir le champ d'état d' $dirty. Faire quelque chose comme:

$scope.myForm.username.$dirty = true; ne semble pas fonctionner.

Il existe une méthode $setPristine que je peux utiliser pour réinitialiser l'état du terrain, mais il n'y a pas un $setDirty méthode?

Alors, comment fait-on pour le faire?

J'ai vu ce post https://groups.google.com/forum/#!topic/angulaire/NQKGAFlsln4 mais je n'arrive pas à trouver l' $setDirty méthode. Je suis Angulaire à l'aide de la version 1.1.5.

87voto

rmag Points 261

Dans votre cas, `` fait le tour - cela rend le formulaire et le champ sales et ajoute des classes CSS appropriées.

Pour être honnête, j’ai trouvé cette solution dans le nouveau message dans le sujet depuis le lien de votre question. Cela a fonctionné parfaitement pour moi, donc je vais mettre cela ici comme une solution autonome pour le rendre plus facile à trouver.

17voto

TheSharpieOne Points 6364

vous devez définir manuellement $dirty de true et $pristine de false pour le champ. Si vous voulez les classes apparaissent sur votre entrée, vous devrez ajouter manuellement ng-dirty et retirez ng-pristine des classes de l'élément. Vous pouvez utiliser $setDirty() sur le niveau du formulaire pour faire tout cela sur le formulaire lui-même, mais pas les entrées de formulaire, formulaire d'entrées n'ont actuellement pas de $setDirty() comme vous l'avez mentionné.

Cette réponse peut changer à l'avenir comme ils devraient ajouter $setDirty() d'entrées, semble logique.

10voto

Marshall Brekka Points 611

Si vous avez accès à NgModelController (vous ne pouvez y avoir accès qu'à partir d'une directive), vous pouvez appeler

 ngModel.$setViewValue("your new view value");
// or to keep the view value the same and just change it to dirty
ngModel.$setViewValue(ngModel.$viewValue);
 

9voto

Gilad Peleg Points 1186

Fait un jsFiddle juste pour vous qui résout ce problème. Définissez simplement $ dirty sur true, mais avec un $timeout 0 afin qu'il s'exécute après le chargement de DOM.

Trouvez-le ici: JsFiddle

c'est-à-dire: $timeout(function () { $scope.form.uName.$dirty = true; }, 0);

3voto

Fran Arant Points 1

Petite note complémentaire à la réponse de @ rmag. Si vous avez des champs vides mais obligatoires que vous voulez rendre sales, utilisez ceci:

 $scope.myForm.username.$setViewValue($scope.myForm.username.$viewValue !== undefined 
    ? $scope.myForm.username.$viewValue : '');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X