2017-01-02 1 views
0

Ich verwende eine jQuery-Funktion, um Formulare automatisch zu verarbeiten und Fehler anzuzeigen, so wie sie mit jQuery auftreten. Ich verwende auch Bootstrap 3.Wie funktioniert eine jQuery-Eingabevalidierungsfunktion mit Angular-Vorlagen?

(function() { 
    // Form Processing 
    $('input').each(function() { 
     var $this = $(this); 
     $this.on('input', function() { 
      if ($this.val().length === 0) { 
       if ($this.attr('required')) { 
        $this 
         .parent('div.control-group') 
         .addClass('has-error') 
         .end() 
         .siblings('p.text-danger') 
         .empty() 
         .text('This field is required'); 
       } else {} 
      } else {} 
     }); 
    }); 
})(); 

Grundsätzlich überprüft dies, ob ein Feld erforderlich ist. Wenn das Feld nicht gültig ist, wird eine einfache Fehlermeldung angezeigt. Es funktioniert auch wirklich gut.

Hier ist eine grundlegende Vorlage, die diese Arbeit macht:

<div class="control-group> 
    <input type="email" required> 
    <p class="text-danger"></p> 
</div> 

Allerdings, wenn ich Angular Vorlagen verwenden, wird der Code nicht auftreten, da das DOM nicht vor der Hand geladen wird. Ich denke, der richtige Weg zum Handeln wäre die Schaffung einer Angular-Direktive für diesen Code. Ich habe ein paar Fragen dazu:

  • Wo stelle ich das Derivat? Sollte es so etwas wie myapp.run sein?
  • Bin ich falsch in meiner Annahme, ein Derivat zu erstellen? Gibt es einen besseren Weg dies zu tun, so dass es mit Angular funktioniert?

Danke.

+0

eine gemeinsame Klasse ('required') auf alle diese Eingaben und verwenden Sie dann einen Delegierten. '$ (Dokument) .on ('. erforderlich', 'Eingabe', Funktion() {...})'. Wenn Sie jedoch ein Framework verwenden, sollten Sie bei seinem Ansatz bleiben. Mehr Sie gehen außerhalb Framework-Umgebung, um Zeug zu erreichen, mehr Ihr fragiler Code wird – Rajesh

+0

Dies ist völlig falsche Ansatz, wenn eckig bereits in Form Validierung eingebaut hat – charlietfl

+0

Nehmen Sie jQuery und bootstrap.js aus Ihrem Projekt und lesen [Denken in eckigen, wenn ich habe ein jQuery Hintergrund] (http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background) – charlietfl

Antwort

3

Sie können mit ng-Nachrichten Richtlinie kombinierter Form oder ng-Form-Richtlinie verwenden, um zu vermeiden jquery Mischen mit Winkel

Beispiel

<form name="myForm"> 
    <label> 
    Enter your name: 
    <input type="text" 
      name="myName" 
      ng-model="name" 
      ng-minlength="5" 
      ng-maxlength="20" 
      required /> 
    </label> 
    <pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre> 

    <div ng-messages="myForm.myName.$error" style="color:maroon" role="alert"> 
    <div ng-message="required">You did not enter a field</div> 
    <div ng-message="minlength">Your field is too short</div> 
    <div ng-message="maxlength">Your field is too long</div> 
    </div> 
</form> 

Quelle https://docs.angularjs.org/api/ngMessages/directive/ngMessages

+0

Danke Mann, das funktioniert perfekt. –

+0

Mein Vergnügen :) viel Spaß! – Melzar

Verwandte Themen