7

AngularJS を使用するように jQuery アプリケーションを書き直しています。小さなステップを使用して、一度に 1 つの領域を置き換えています。ただし、AngularJS で jQuery のイベントをリッスンする方法に問題があります。

例として$(document).trigger('doSomething')、jQuery ウィジェットに があります。AngularJS コントローラーでそれを聞くにはどうすればよいですか?

を使用してみ$scope.$on('doSomething', function(){})ましたが、それはコントローラーのスコープのみを参照しています。も試しまし$rootScope.$on('doSomething', function(){})たが、うまくいきませんでした。

アプリケーションを段階的に変換し、jQuery によってトリガーされたドキュメント イベントをリッスンする方法はありますか?

4

4 に答える 4

6

私はここで腰を抜かしていますが、jQuery イベントと AngularJS イベントは 2 つの別個のシステムだと思います。簡単な解決策は、jQuery イベントを AngularJS イベントに変換するグローバルなキャッチオール jQuery イベント リスナーを用意することです。

後で、ウィジェットをディレクティブでラップし、より具体的なイベント トランスレーターをその中に入れたいと思うかもしれません。その時点で、イベント システムに固執するかどうか、または角度付きサービスがウィジェットが他の世界と通信するためのより適切な方法であるかどうかを検討することもできます。

上記は、AngularJS メカニズムを使用するようにウィジェットを書き直すことができない、または書きたくないことを前提としています。それがオプションの場合は、代わりに$scope.$broadcastor$scope.$emitをウィジェットで直接使用して$.triggerください。

于 2013-05-12T19:53:36.580 に答える
1

この回答が表示されるはずです: https://stackoverflow.com/a/15012542/535025

よくわかりませんが、あなたにはそれができないと思います。@Suprが言ったように、それらは別々のカスタムイベントを持つ2つの別々のシステムです。

jQuery と Angular を混在させないようにしてください。$('selector').method()データバインディングを処理するため、呼び出す必要があるたびにディレクティブを作成することを検討することをお勧めします。

于 2013-05-12T23:52:41.043 に答える