2016-05-31 5 views
0

私は簡単なログインフォームを持っています。ユーザー名は電子メール形式でなければならないので、ng-pattern制約があります。休憩パターンルールを作成する指示を追加

HTMLフォーム:

<form name="loginForm"> 
       <div class="form-group"> 
        <input type="text" name="username" ng-model="user.name" ng-pattern="/^[_a-zA-Z0-9-]*@[a-zA-Z0-9-]+([\.a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$/" required class="input-text full-width" placeholder="email address"> <span ng-show="usernameError"><small style="color: red">Enter E-mail Address</small></span> 

       </div> 
       <div class="form-group"> 
        <input type="password" name="password" ng-model="user.password" required class="input-text full-width" placeholder="password"> <span ng-show="passLenError"><small style="color: red">Password can be 6 to 15 characters long, and must have at least one letter and one digit</small></span> 
       </div> 
       <div class="form-group"> 
        <a href="#" class="forgot-password pull-right" ng-click="passwordRecovery=true">Forgot password?</br></a> 
        <div ng-show="false" class="checkbox checkbox-inline"> 
         <label> <input type="checkbox"> Remember me 
         </label> 
        </div> 
       </div> 
      </form> 
     <div class="text-center"> 
      <button type="submit" ng-click="loginUser()" class="full-width btn-medium">LOGIN</button> 
     </div> 

私はそうは入力したときには、フォームが送信されます押されて、フォームにこのディレクティブを追加しました。

AngularJS指令:

loginApp.directive('ngEnter', function() { 
    return function(scope, element, attrs) { 
     element.bind("keydown keypress", function(event) { 
      if(event.which === 13) { 
       scope.$apply(function(){ 
        scope.$eval(attrs.ngEnter, {'event': event}); 
       }); 

       event.preventDefault(); 
      } 
     }); 
    }; 
}); 

問題は、私は、フォームのNGパターンにNG-入力を追加するときには動作しませんです。 true/falseの代わりに '$ scope.loginForm.username。$ error.pattern'の値が定義されていません。まだ必要です。

<form name="loginForm" ng-enter="loginUser()"> 
+0

あなたは 'ng'接頭辞を持つカスタムディレクティブを作成しないでください。また、1.3 + – devqon

+0

からはサポートされていません。 'scope。$ apply'セクションにコメントするとどうなりますか?私は 'ng-pattern 'に干渉する感覚を得ます。 –

+0

また、有効な電子メールアドレスには奇妙な文字がたくさん含まれている可能性があります。独自の正規表現を使用すると、有効なアドレスを許可しない可能性があります。 http://stackoverflow.com/questions/46155/validate-email-address-in-javascript)。実際には、通常は非常に許容される正規表現(例えば、@記号をチェックする)を使用し、実際に電子メールを送信してアドレスを検証するのが最善です。 – Nico

答えて

0

あなたはng-submitを使用すると、ボタンの設定タイプすることができ、この場合submitです:

<form name="loginForm" ng-submit="loginUser()"> 
    // some thing 
    <button type="submit" class="full-width btn-medium">LOGIN</button> 
</form>