2016-09-07 5 views
1

角度にイベントリスナーを追加する必要がありますが、リスナーが正しく動作していないようで、指示が初期化されるとコールバックが呼び出されてから動作しません。このように:イベントリスナーを角度指示に追加する適切な方法

[input.some-elm.ng-pristine.ng-untouched.ng-valid] 
called 

だから、何がそのような予期しない動作の原因になることができ、角にイベントリスナーを追加する適切な方法は何ですか:

var someDir = function() { 
    return { 
     restrict: 'E', 
     transclude: true, 
     scope: {}, 
     templateUrl: 'someTmpl', 
     link: function (scope, element) { 
      scope.someFunc = function() { console.log('called'); }; 

      console.log(element[0].getElementsByClassName('some-elm')); 
      element[0].getElementsByClassName('some-elm')[0].addEventListener('mousedown', scope.someFunc()); 
     } 
    } 
}; 

とコンソールでページロードの

は私が見ることができます指令?

P .:この指示はui-view内部にありますが、そのような振る舞いには何か関係がありますか?

+0

あなたはaddEventListener' 'への参照を渡す必要があります。この 'Element [0] .getElementsByClassName(' some-elm ')[0] .addEventListener(' mousedown '、scope.someFunc);' –

答えて

1

リンク関数では、ディレクティブが配置される要素が取得されます。

bindメソッドを使用してイベントを添付できます。

link: function(scope, element) { 
    var someFunc = function() { console.log('called'); }; 

    element.bind('mousedown',someFunc); 
} 

あなたは、link function内ディレクティブにマッピングされ

をテンプレートにsomeFuncを公開したい場合、あなたはあなたが「.some-上のHTMLテンプレートでngMousedown使用することができますscope.someFunc =someFunc

関連する問題