Ответ 1
Если у вас есть атрибут действия, указанный для формы, angularjs не будет делать preventDefault. Если вы удалите его и добавьте вместо него ng-submit:
<form name="myForm" method="post" ng-submit="signUp(myForm)" novalidate>
<input type="email" name="email" ng-model="newSignup.email" required>
<button type="submit">sign up</button>
</form>
В этом случае форма всегда будет иметь preventDefault и при отправке вашей функции $scope.signUp() вызывается, где вы можете продолжить запись ajax на бэкэнд/регистрацию или дополнительную проверку.
Обратите внимание, что, используя правильные атрибуты проверки на ваших входах (например, type = "email" и обязательно), angularjs выполнит некоторую базовую проверку для вас.
Вы можете добавить дополнительную кнопку ng-disabled="!myForm.$valid"
в кнопку отправки, чтобы кнопка не была отключена, пока письмо не было правильно введено.
Используя ng-модель на входах, как в моем примере, ваша область получит объект $scope.newSignup
, который вы можете проверить в своей функции signUp() для дальнейшей проверки:
$scope.signUp = function(htmlForm) {
if ($scope.newSignup.email !== '[email protected]') {
return false; // you should really show some info to the user
}
...
}