I have an email field in my form that is validated for both being not empty and a valid email. The code is as follows (see plunker - Angular 1.3.0-beta.13):
<form name="myForm" novalidate>
<input type="email" name="email" ng-model="email" required>
<span ng-show="myForm.email.$error.required">Missing Email</span> |
<span ng-show="myForm.email.$error.email">Invalid Email</span>
<pre>myForm.email.$error: {{ myForm.email.$error | json }}</pre>
</form>
When started, only the "Missing Email" message is shown, as expected. When I start typing in the input, both messages Missing Email and Invalid Email are shown even if the field is not empty! This is not expected.

When typing a valid email, both errors disappear, as expected:

When getting from the valid email state to invalid email state (by delete characters), only the invalid email message shows, as expected:

It seems that angular stops on the first validation violation leaving the $error object in a stale state.
Is this a bug in the framework? am I missing something here?
emailis undefined until you type something. The reason it works the second time is because there is still a value for the model after putting the space. Just add a{{ email}}to see the output in real time and you will see.