AngularJSに、(ng-*
マークアップを使用する代わりに)javascriptのみを使用してコントローラーメソッドをプログラムでバインドする方法はありますか?
何かのようなもの
$("#foo").click(FooController.foo)
PS:私はにアクセスできません$compile
AngularJSに、(ng-*
マークアップを使用する代わりに)javascriptのみを使用してコントローラーメソッドをプログラムでバインドする方法はありますか?
何かのようなもの
$("#foo").click(FooController.foo)
PS:私はにアクセスできません$compile
コントローラーのメソッドまたはスコープが本当に必要ですか?
スコープが必要な場合は、angular.element('#myid').scope().method
ただし、スコープの値の変更は、AngularJSイベント処理の外部で行った場合は検出されないため、コードをスコープの$apply関数にラップする必要があることに注意してください。
また、AngularJSでは、JSからのDOMの変更は一般的に「ビッグノーノー」であることに注意してください。
もちろん、コントローラーの関数もあります( "this.xxx = function().."を使用して作成されます)。それらは一種のプライベートであるため、アクセスするのが良いかどうかはわかりませんが、同じ方法でアクセスできるはずです:element(..)。controller()。method
正式にはサポートされていません。確かに、いくつかのハックで技術的には可能ですが、JavaScriptからイベントハンドラーをバインドすることは、コントローラーからDOM要素にアクセスすることを意味し、AngularJSの原則に反します。
@Valentynの答えをいくらか拡張するために、コントローラーメソッド($ scopeメソッドではなく)にアクセスしたい場合-たとえば、this
コントローラーコンストラクター関数(Angularホームページでは、「tabs」ディレクティブは関数を定義します)で定義されたメソッド)を使用したコントローラーの「addPane」this
-使用できます
angular.element('#myid').controller().method()
できますが、すべきではありません。将来的に問題が発生する可能性があります。
なぜこれを行いたいのかについてもう少し説明できれば、より良い(そしてより簡単な)方法があるかもしれません。