You are missing two things.
First: add type="submit" to the md-button element.
Second: add novalidate to the form element:
Note that novalidate is used to disable validation of your own browser form.
You should also use ng-submit on the form element instead of using ng-click on the button.
<form name="userForm" novalidate ng-submit="userForm.$valid && vm.registerUser()"> <md-input-container> <input name="email" placeholder="Email" data-ng-model="vm.registerUserData.email" required /> <div ng-messages="userForm.email.$error" ng-if='userForm.myControl.$dirty'> <div ng-message="required">This is required!</div> </div> </md-input-container> <md-input-container> <input name="Password" placeholder="Password" data-ng-model="vm.registerUserData.password" required /> <div ng-messages="userForm.Password.$error"> <div ng-message="required">This is required!</div> </div> </md-input-container> <md-input-container> <md-button type="submit" id="registerUser" value="Register" class="md-raised md-primary" aria-label="login" ng-disabled="login.loginForm.$invalid()"> Create </md-button> </md-input-container> </form>
source share