[Angularjs] Problème avec directive

Problème avec directive [Angularjs] - Javascript/Node.js - Programmation

Marsh Posté le 13-06-2015 à 11:29:57    

Bonjour,

 

Je suis entrain de faire un site web en utilisant le framework angularjs.

 

Je suis entrain de faire le formulaire d'inscription. Ce formulaire ne peut être envoyé (ng-disable sur le bouton du formulaire ) uniquement si tous les champs sont valides. Le problème c'est que depuis que j'utilise une directive pour vérifier que l'email n'existe pas en base, le bouton du formulaire reste grisé.

 

Par contre les messages pour l'email disparaissent et apparaissent correctement.

 

Voici le formulaire :

 
Code :
  1. <form name="createUser" class="form-horizontal createUserForm" novalidate >
  2.             <h3>Inscription</h3>
  3.             <div class="form-group">
  4.                 <fieldset>
  5.                 <legend>Informations:</legend>
  6.                     <label for="LastName" class="col-md-2 col-sm-2 control-label">Nom</label>
  7.                     <div class="col-md-10 col-sm-10" ng-class="{ 'has-error' : createUser.lastName.$invalid && !createUser.lastName.$pristine }" >
  8.                          <div class="input-group">
  9.                             <input type="text" class="form-control" id="LastName" name="lastName" placeholder="Nom" ng-model="user.LastName" required >
  10.                             <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
  11.                         </div>
  12.                         <p ng-show="createUser.lastName.$invalid && !createUser.lastName.$pristine" class="help-block">Votre nom est obligatoire.</p>
  13.                     </div>
  14.                 </div>
  15.                 <div class="form-group">
  16.                     <label for="FirstName" class="col-md-2 col-sm-2 control-label">Prénom</label>
  17.                     <div class="col-md-10 col-sm-10" ng-class="{ 'has-error' : createUser.firstName.$invalid && !createUser.firstName.$pristine }">     
  18.                         <div class="input-group">
  19.                             <input type="text" class="form-control" id="FirstName" name="firstName" placeholder="Prénom" ng-model="user.FirstName" required >
  20.                             <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
  21.                         </div>
  22.                         <p ng-show="createUser.firstName.$invalid && !createUser.firstName.$pristine" class="help-block">Votre prénom est obligatoire.</p>
  23.                     </div>
  24.                 </div>
  25.                 <div class="form-group">
  26.                     <label for="Email" class="col-md-2 col-sm-2 control-label">E-mail</label>
  27.                     <div class="col-md-10 col-sm-10" ng-class="{ 'has-error' : createUser.email.$error.unique && createUser.email.$error.valid && !createUser.email.$pristine }">
  28.                         <div class="input-group">
  29.                             <input type="email" class="form-control" id="Email" name="email" placeholder="E-mail" ng-model="user.Email" ensure-unique="user.Email" required >
  30.                             <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
  31.                         </div>
  32.                         <span ng-show="createUser.email.$error.valid && !createUser.email.$pristine" class="help-block">Entrer un e-mail valide.</span>
  33.                         <span class="help-block" ng-show="createUser.email.$error.unique && !createUser.email.$pristine">
  34.                            Cette email est déjà utilisé pour un compte
  35.                         </span>
  36.                     </div>
  37.                 </div>
  38.                 <div class="form-group">
  39.                     <label for="Email" class="col-md-2 col-sm-2 control-label">Portable</label>
  40.                     <div class="col-md-10 col-sm-10" ng-class="{ 'has-error' : createUser.phone.$invalid && !createUser.phone.$pristine }">
  41.                         <input type="text" class="form-control" id="Phone" name="phone" placeholder="Portable" ng-model="user.Phone"  ng-pattern="/^((\+|00)33\s?|0)[679](\s?\d{2}){4}$/" >
  42.                         <p ng-show="createUser.phone.$invalid && !createUser.phone.$pristine" class="help-block">Entrer un numéo de téléphone portable valide.</p>
  43.                     </div>
  44.                 </div>
  45.                 <div class="form-group">
  46.                     <label for="Type" class="col-md-2 col-sm-2 control-label">Type</label>
  47.                     <div class="col-md-10 col-sm-10" >
  48.                         <select class="form-control" id="Type" ng-model="user.Type">
  49.                           <option value="Student">&Eacute;tudiant</option>
  50.                           <option value="Professionnal">Professionnel</option>
  51.                           <option value="Other">Autre</option>
  52.                         </select>
  53.                     </div>
  54.                 </div>
  55.                
  56.            
  57.             <div class="form-group">
  58.                     <div class="col-md-4 col-md-offset-5 col-sm-10">
  59.                         <button id="inscriButton" data-style="zoom-in" data-color="blue" type="button" class="ladda-button btn btn-primary" ng-disabled="createUser.$invalid" ng-click="createTask(user)">S'inscrire</button>
  60.                         <p class="connect" >Déjà Inscrit ? <a href="../view/Connexion.html">Connectez-vous</a></p>
  61.                     </div>
  62.             </div>
  63.         </form>
 

et voici maintenant la directive

 
Code :
  1. app.directive('ensureUnique', ['$http', function($http) {
  2.   return {
  3.     scope:  true,
  4.     require: 'ngModel',
  5.     link: function(scope, ele, attrs, ctrl) {
  6.      ctrl.$parsers.unshift(function(viewValue) {
  7.          var email = {
  8.             Mail : viewValue
  9.           }
  10.          var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/;
  11.          if(pattern.test(viewValue)){
  12.                scope.createUser.email.$setValidity('valid', true);
  13.               $http.post("http://localhost:34423/api/Users/CheckMail",email).success(function(data,status,headers){
  14.                   scope.createUser.email.$setValidity('unique', true);;
  15.                 });
  16.          } else {
  17.             scope.createUser.email.$setValidity('valid', false);
  18.          }
  19.        
  20.      });
  21.     }
  22.   }
  23. }]);
 

Merci d'avance


Message édité par OrcusZ le 13-06-2015 à 12:59:37

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 13-06-2015 à 11:29:57   

Reply

Marsh Posté le 13-06-2015 à 13:19:25    

Bonjour,
 
 
Après de l’acharnement cette ligne de code
 
scope.createUser.email.$setValidity('email',true);
 
 
à résolu mon problème
 


---------------
Made you your own sentence without believing that of the others...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed