$pristine/ $dirtyle dice si el usuario realmente cambió algo, mientras que $touched/ $untouchedle dice si el usuario simplemente ha estado allí / visitado .
Esto es realmente útil para la validación. El motivo $dirtysiempre fue evitar mostrar respuestas de validación hasta que el usuario haya visitado un cierto control. Pero, al usar solo la $dirtypropiedad, el usuario no recibiría comentarios de validación a menos que realmente modificaran el valor. Por lo tanto, un $invalidcampo aún no le mostrará al usuario un mensaje si el usuario no cambió / interactuó con el valor. Si el usuario ignoraba por completo un campo obligatorio, todo parecía estar bien.
Con Angular 1.3 y ng-touched, ahora puede establecer un estilo particular en un control tan pronto como el usuario se haya desdibujado, independientemente de si realmente editó el valor o no.
Aquí hay un CodePen que muestra la diferencia en el comportamiento.