10

如果在填写表格时电子邮件为空,我想阻止 http-post 到“/signUp”的默认操作。

控制器代码:-

$scope.signUp = function() {

  if($scope.email = null);
    preventdefault;

}

html(玉):-

form(name="input", action="/signUp", method="post")
  input(type="submit", value="submit")
4

1 回答 1

18

当你为表单指定了 action 属性时,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 发布到后端 /signup 或进一步验证。请注意,通过在您的输入上使用适当的验证属性(如 type="email" 和 required),angularjs 将为您执行一些基本验证。您可以ng-disabled="!myForm.$valid"在提交按钮上添加一个额外的按钮,以在未正确输入电子邮件时保持该按钮处于禁用状态。

通过在我的示例中的输入上使用 ng-model,您的作用域将获得一个$scope.newSignup对象,您可以在您的 signUp() 函数中检查该对象以进行进一步验证:

$scope.signUp = function(htmlForm) {
    if ($scope.newSignup.email !== 'some@email.com') {
       return false;  // you should really show some info to the user
    }
    ...
}
于 2013-10-29T11:51:47.023 回答