You’re overpowering the number of conditions on your inputs, and a conflict is arising somewhere. I don’t see why you need ngModel at all, and that’s the first thing I’d remove. Define a submit handler for your form, check input correctness inside the submit handler, and, if that fails, pop appropriate errors.
Also, I don’t understand why the logical candidate for your submit button lies outside the form. That might be a source of conflict also. What I do in my login form is that the login button goes to the submit handler, and, only if all checks on input correctness pass, does the submit handler call loginUser().