2013-02-20 7 views
7

: Ich binüberprüfen, ob Daten vorhanden sind bereits auf dem Server in Angularjs

<input type="email" disabled='disabled' name="email" ng-model="userInfo.emailAddress" 
            class="input-xlarge settingitem" style="height:30px;"> 

<span ng-show="myForm.email.$error.email" class="help-inline" style="color:red;font-size:10px;"> 
             Not a Valid Email Address</span> 

Ich habe E-Mail-Feld Angularjs, entsprechend dem muss ich auf dem Server überprüfen, ob es bereits in der Datenbank vorhanden ist oder nicht .

Kann jemand mich durch die Schritte, wie es auf dem Server durchgeführt werden kann Winkel Richtlinien und Dienste zur Überprüfung

Antwort

9

würde ich vorschlagen, eine Richtlinie zu schreiben, die in NgModelController#$parsers Pipeline stecken würden (überprüfen „Custom Validation“ von http://docs.angularjs.org/guide/forms) . Hier

ist eine Skizze einer solchen Richtlinie:

.directive('uniqueEmail', ["Users", function (Users) { 
    return { 
    require:'ngModel', 
    restrict:'A', 
    link:function (scope, el, attrs, ctrl) { 

     //TODO: We need to check that the value is different to the original 

     //using push() here to run it as the last parser, after we are sure that other validators were run 
     ctrl.$parsers.push(function (viewValue) { 

     if (viewValue) { 
      Users.query({email:viewValue}, function (users) { 
      if (users.length === 0) { 
       ctrl.$setValidity('uniqueEmail', true); 
      } else { 
       ctrl.$setValidity('uniqueEmail', false); 
      } 
      }); 
      return viewValue; 
     } 
     }); 
    } 
    }; 
}]) 

Wo die Users.query einen Asynchron-Aufruf ist zu überprüfen, ob eine E-Mail eindeutig ist oder nicht. Natürlich sollten Sie dies durch einen Anruf an Ihr Back-End ersetzen.

<input type="email" ng-model="user.email" unique-email> 

Beispiel dieser Richtlinie aus dem angular-app genommen wurde, dass einige der AngularJS Community-Mitglieder versuchen, zusammen zu stellen gemeinsame Anwendungsfälle zu illustrieren:

Wenn Sie fertig sind, kann diese Richtlinie wie so verwendet werden. Es könnte sich lohnen, zu sehen, wie all das in der kompletten App zusammenpasst.

+0

Danke für Ihre Antwort, können Sie bitte auch vorschlagen, wie Sie den vorherigen Wert vergleichen. –

+0

Ihre Lösung funktioniert gut, aber ich bin mit einem Problem konfrontiert, wenn ich einen Rückruf vom Server bekomme, wird meine ganze Form klar –

+0

Wie rufen Sie vom Server? –

Verwandte Themen