2

私は入力フィールドの中に入るカスタムディレクティブを作成しました。この指令の目的は、Inputfield内の値/データを分析することです。 This directive is supposed to be called everytime the inputField is given focus/cursor.ディレクティブは一度だけ呼び出されます

問題があるしかしは、私のカスタムディレクティブは一度だけと呼ばれています。入力フィールドがフォーカスされるたびになぜ呼び出されないのかわかりません。

私はここで間違っていますか?

私はAngularを初めて使っているので、私はどこかで逃した重要な細部があると確信しています。

ここにはplunkerがあります。

+0

を確認するには、使用スタックスニペットやショーのコードをplunkrリンクしません。この質問はplunkrリンクがもう利用できなくなったときには不可能です – Walfrat

+0

@Walfrat Ok。 Downvoterは、 "仮定された"間違いが将来繰り返されないように、投票の理由を明記してください! –

+0

これが理由でした:) – Walfrat

答えて

2

これは想定された動作です。リンク関数は、指定されたディレクティブのインスタンスに対して1回だけ呼び出されます。あなたも「カーソル」を言及しているので、あなたが興味があるかもしれない

var mainApp = angular.module("myapp", ['ngMaterial']); 

mainApp.directive("myDirective", function($log) { 
    return { 
     restrict : 'A', 
     require : "ngModel", 
     scope : { 
      myDirective : "=" 
     }, 
     link : function(scope, element, attrs, ngModel) { 
      element.on('focus', doSomething); 

      function doSomething() { 
      $log.log("value is:", scope.myDirective); 
      if (ngModel.$isEmpty() && scope.myDirective && scope.myDirective.length > 0) { 
       ngModel.$setUntouched(); 
       ngModel.$setValidity(); 
      } 
     } 

     } 
    } 
}); 

http://plnkr.co/edit/RwTSsQKBtzzJDXE8by1I?p=preview

:あなたはfocusイベントに興味を持っているので、私は、ディレクティブが適用される要素にイベントリスナを追加しましたmouseoverイベントも同様です。これは、別のイベントリスナーを追加するのと同じくらい簡単です:

element.on('mouseover', doSomething)

注:私はundefinedlengthを読むことで、コンソールエラーを回避するためにscope.myDirectiveのための追加のチェックを追加しました。 OPの要求に応じて

jqLit​​eは、これらのすべてをサポートしている場合、私は知らないが、すべてのDOMイベントのリストについては、あなたがこのpageをチェックする必要があり、あなたはおそらくfocus-の中で最も興味を持っている、キーボード - &マウスイベント。すべてjqLit​​e機能一覧は

this

+0

パーフェクト! 「要素」オブジェクトで使用できる関数のリストにリンクしてください。 「フォーカス」や「マウスオーバー」などのイベントのリストにリンクすることはできますか? –

+0

@UmerFarooq私のポストに関連するリンクを追加しました –

+0

@UmerFarooq前にそれを忘れましたが、すべてのjqLit​​e関数へのリンクも追加しました –

関連する問題