$pristine/ $dirtyinforma se o usuário realmente mudou alguma coisa, enquanto $touched/ $untouchedinforma se o usuário apenas esteve lá / visitou .
Isso é realmente útil para validação. O motivo $dirtyfoi sempre evitar mostrar respostas de validação até o usuário realmente visitar um determinado controle. Mas, usando apenas a $dirtypropriedade, o usuário não obteria feedback de validação a menos que realmente alterasse o valor. Portanto, um $invalidcampo ainda não mostraria ao usuário um prompt se o usuário não alterasse / interagisse com o valor. Se o usuário ignorou completamente um campo obrigatório, tudo parecia correto.
Com o Angular 1.3 e ng-touched, agora você pode definir um estilo específico em um controle assim que o usuário desfocar, independentemente de editar ou não o valor.
Aqui está um CodePen que mostra a diferença de comportamento.