2013-10-28 5 views
10

Ich möchte verhindern - Standardaktion von http-Post auf "/ SignUp", wenn E-Mail null beim Ausfüllen Formular ist.verhindern Standard bei Senden: - Angularjs

Controller-Code: -

$scope.signUp = function() { 

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

} 

html (Jade): -

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

hinzufügen 'ng-disabled = "! email" 'zur Eingabe. Oder noch besser: Implementieren Sie die Formularvalidierung ordnungsgemäß. –

Antwort

18

Wenn Sie das action-Attribut für das Formular angegeben haben, AngularJS nicht prevent tun. Wenn Sie es entfernen und hinzufügen ng einreichen statt:

<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> 

das Formular In diesem Fall wird immer prevent und auf $ scope.signUp() Funktion aufgerufen wird, einreichen, wo Sie mit einer Ajax-Post gehen können zum Backend/Signup oder zur weiteren Validierung. Beachten Sie, dass anglejs bei der Verwendung geeigneter Validierungsattribute für Ihre Eingaben (wie type = "email" und erforderlich) eine grundlegende Validierung für Sie durchführt. Sie können eine zusätzliche ng-disabled="!myForm.$valid" auf der Schaltfläche senden, um die Schaltfläche deaktiviert zu halten, während die E-Mail nicht korrekt eingegeben wird.

Durch die Verwendung von ng-Modell an den Eingängen wie in meinem Beispiel Ihr Umfang erhält ein $scope.newSignup Objekt, das Sie in Ihrer Registrierung() Funktion für eine weitere Validierung überprüfen:

$scope.signUp = function(htmlForm) { 
    if ($scope.newSignup.email !== '[email protected]') { 
     return false; // you should really show some info to the user 
    } 
    ... 
} 
+6

Was passiert, wenn ich das Formular brauche, um zu arbeiten, auch wenn Javascript deaktiviert ist? Dann würde ich das Aktionsattribut benötigen, andernfalls wird das Formular nicht übermittelt. Wie würde ich verhindern, dass eckige (in diesem Fall mit offensichtlich aktiviertem Javascript) übermittelt? – berliner

+1

Ah, hab es von hier https://groups.google.com/forum/#!topic/angular/pqoaPaLdhR4. Die Registrierung eines eigenen Submit-Handlers wird es tun. – berliner