2013-02-20 15 views
7

Jestem nowy angularjssprawdzić, czy dane już istnieje na serwerze w 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> 

Mam pole e-mail, który odpowiada muszę sprawdzić na serwerze, jeśli już istnieje w bazie danych, czy też nie .

Może ktoś poprowadzi mnie przez kolejne etapy, jak można to zrobić za pomocą kątowych dyrektyw i usług do sprawdzania na serwerze

Odpowiedz

9

Proponuję napisanie dyrektywę, która będzie podłączyć do NgModelController#$parsers rurociągu (sprawdź „Custom Validation” od http://docs.angularjs.org/guide/forms) .

Oto szkic takiej dyrektywy:

.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; 
     } 
     }); 
    } 
    }; 
}]) 

Jeżeli Users.query jest wywołanie asynchronicznej Aby sprawdzić, czy e-mail jest unikatowy lub nie. Oczywiście powinieneś zastąpić to wezwaniem do twojego back-endu.

Po zakończeniu, dyrektywa ta może być używana tak:

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

Przykład tej dyrektywy została podjęta z angular-app że niektórzy członkowie angularjs społeczności starają się połączyć w celu zilustrowania typowych przypadków użycia. Warto sprawdzić, jak to wszystko pasuje do kompletnej aplikacji.

+0

Dziękuję za odpowiedź. Czy możesz również zasugerować, jak porównać poprzednią wartość. –

+0

Twoje rozwiązanie działa dobrze, ale mam do czynienia z jednym problemem, gdy otrzymuję oddzwanianie z serwera, moja cała forma staje się jasna –

+0

Jak zadzwonić z serwera? –

Powiązane problemy