Quais são as diferenças entre ng-pristine
e ng-dirty
? Parece que você pode ter os dois para ser true
:
$scope.myForm.$pristine = true; // after editing the form
A ng-dirty
classe informa que o formulário foi modificado pelo usuário, enquanto a ng-pristine
classe informa que o formulário não foi modificado pelo usuário. Assim, ng-dirty
e ng-pristine
são dois lados da mesma história.
As classes são definidas em qualquer campo, enquanto o formulário tem duas propriedades, $dirty
e $pristine
.
Você pode usar a $scope.form.$setPristine()
função para redefinir um formulário para o estado original (observe que este é um recurso do AngularJS 1.1.x).
Se você quiser um $scope.form.$setPristine()
comportamento -ish mesmo no branch 1.0.x do AngularJS, você precisa lançar sua própria solução (algumas muito boas podem ser encontradas aqui ). Basicamente, isso significa iterar todos os campos do formulário e definir seu $dirty
sinalizador como false
.
Espero que isto ajude.
pristine nos diz se um campo ainda é virgem, e sujo nos diz se o usuário já digitou algo no campo relacionado:
Um campo que registrou um único evento de keydown não é mais virgem (não mais puro) e, portanto, está sujo para sempre.
fonte
Ambas as diretivas obviamente servem ao mesmo propósito e, embora pareça que a decisão da equipe angular de incluir ambas interfere no princípio DRY e aumenta a carga útil da página, ainda é bastante prático ter as duas por perto. É mais fácil estilizar seus elementos de entrada, pois você tem .ng-pristine e .ng-dirty disponíveis para estilizar seus arquivos css. Acho que esse foi o principal motivo para adicionar as duas diretivas.
fonte
.ng-pristine
e.ng-dirty
permitir diferentes estilos de CSS - esta parece ser a razão mais correta por trás da repetiçãoConforme já afirmado nas respostas anteriores,
ng-pristine
serve para indicar que o campo não foi modificado,ng-dirty
e para informar que foi modificado. Por que precisa de ambos?Digamos que temos um formulário com telefone e endereço de e-mail entre os campos. É necessário telefone ou e-mail, e você também deve notificar o usuário quando houver dados inválidos em cada campo. Isso pode ser feito usando
ng-dirty
eng-pristine
juntos:fonte
ng-pristine ($ pristine)
Boolean True se o formulário / entrada ainda não foi usado ( não foi modificado pelo usuário )
ng-dirty ($ dirty)
Boolean True se o formulário / entrada foi usado ( modificado pelo usuário )
$ setDirty (); Define o formulário em um estado sujo. Este método pode ser chamado para adicionar a classe 'ng-dirty' e definir o formulário para um estado sujo (classe ng-dirty). Este método propagará o estado atual para os formulários pais.
$ setPristine (); Define o formulário em seu estado original. Este método define o estado $ pristine do formulário como true, o estado $ dirty como false, remove a classe ng-dirty e adiciona a classe ng-pristine. Além disso, ele define o estado $ enviado como falso. Este método também se propagará para todos os controles contidos neste formulário.
Definir um formulário de volta a um estado original é freqüentemente útil quando queremos 'reutilizar' um formulário após salvá-lo ou reiniciá-lo.
fonte