2017-02-07 5 views
1

Angularを使用して、ユーザー名の入力フィールドも持つ登録フォームを作成しています。私は、フィールドボケの際にサーバー側の「一意性」のユーザー名を確認する指示文を書きました。AngularJS:フォームの検証のためのディレクティブでイベントが発生しない

App.directive('usernameCheck', ['$http', function ($http) { 
    return { 
     require: 'ngModel', 
     link: function (scope, elem, attrs, ctrl) { 
      elem.on('blur', function (evt) {   
       scope.$apply(function() { 
        $http({ 
         method: 'POST', 
         url: '/usernameCheck/', <-- NEVER ACCESSED!? 
         data: {'username' : $scope.userName} 
        }).success(function(data, status, headers, config) { 
         ctrl.$setValidity('unique', data.status); 
        }); 
       }); 
      }); 
     } 
    } 
}]); 

とHTMLフォーム入力要素:

これは私の角度のコードでいくつかの奇妙な理由で

<input type="text" class="form-control" ng-model="userName" name="userName" username-check required> 

、ディレクティブが動作するようには思えません。 JSエラーは発生しませんが、blur要素は起動しません。Firebugによれば、サーバールート "/ usernameCheck"は決して呼び出されません。私は何が欠けていますか?

+1

あなたは 'NG-blur'角度ディレクティブを使用しないのはなぜ? https://docs.angularjs.org/api/ng/directive/ngBlur –

+0

私はちょうどカスタムディレクティブを書いてみたいと思っています。) –

答えて

0

ng-blurアプローチ(簡単な一般的な例)で試してみてください。

app.directive('directiveName', function() { 
    return { 
    restrict: 'E', 
    scope: { 
     ngBlur: '&' 
    }, 
    link:function(scope){  
     scope.onBlur = function(ev){ 
     console.log(ev); 
     }  
    },  
    template: '<input ng-blur="onBlur($event)"></input>' 
} 
}); 
+0

私は以前提案したように 'elem.bind'を試しました。どちらも働かなかった...試み続けるだろう。 –

関連する問題