2017-07-03 3 views
1

Je crée un formulaire d'enregistrement en utilisant AngularJs + matériau angulaire. Le problème que j'ai est que lorsque le formulaire est valide et qu'il est soumis, il est soumis deux fois. Je ne peux pas comprendre pourquoi.AngularJs + formulaire de matériau angulaire soumet deux fois

Je ne déclare pas le contrôleur deux fois. Le contrôleur est déclaré uniquement dans le fournisseur de route. Je n'utilise pas ngSubmit et ngClick simultanément.

Html code pour la forme

 <form 
      ng-submit="registerForm.$valid && performRegister()" 
      name="registerForm" 
      novalidate> 
      <md-input-container class="md-block"> 
       <label>Name</label> 
       <input 
        type="text" 
        name="name" 
        ng-model="register.user.name" 
        required> 
       <div ng-messages="registerForm.name.$error"> 
        <div ng-message="required">Inserisci il tuo nome</div> 
       </div> 
      </md-input-container> 
      <md-input-container class="md-block"> 
       <label>Email</label> 
       <input 
        type="email" 
        name="email" 
        ng-model="register.user.email" 
        ng-pattern="pattern.emailPattern" 
        required> 
       <div ng-messages="registerForm.email.$error"> 
        <div ng-message="required">Inserisci la tua mail</div> 
        <div ng-message="pattern">Devi inserire una mail valida</div> 
       </div> 
      </md-input-container> 
      <p> 
       <md-button 
        type="submit" 
        class="button-block">Register</md-button> 
      </p> 
     </form> 

Contrôleur

SOS.controller("RegisterController", ["$scope", "$rootScope", "config", 
function($scope, $rootScope, config) { 
    $scope.register = { 
     user: { 
      name: null, 
      email: null, 
     } 
    } 
    $scope.pattern = { 
     emailPattern: config.emailPattern 
    } 
    $scope.performRegister = function(){  
     console.log($scope.register.user); 
    } 
}]); 

Chaque fois que je soumettre le formulaire en utilisant le bouton d'envoi, la fonction performRegister() est appelée deux fois, et je vois le message dans la console deux fois. Si je soumets le formulaire en utilisant la touche Entrée, il est soumis une fois. Une idée de pourquoi cela se passe-t-il? Merci beaucoup.

Répondre

0

J'ai eu le même problème dans mon application. C'est ce que j'ai fait pour le résoudre.

J'ai ajouté 'ng-click = "performRegister()" (en prenant votre code comme exemple) dans le bouton md, & a supprimé la même fonction de la balise' form '.

Donc finalement il ressemble:

<form 
     ng-submit="registerForm.$valid" 
     name="registerForm" 
     novalidate> 
    .. 
    ... 
<md-button type="submit" ng-click="performRegister()" 
       class="button-block">Register</md-button> 

Laissez-moi savoir, si cela aide.