1

AngularJSに、(ng-*マークアップを使用する代わりに)javascriptのみを使用してコントローラーメソッドをプログラムでバインドする方法はありますか?

何かのようなもの

$("#foo").click(FooController.foo)

PS:私はにアクセスできません$compile

4

4 に答える 4

3

コントローラーのメソッドまたはスコープが本当に必要ですか?

スコープが必要な場合は、angular.element('#myid').scope().method

ただし、スコープの値の変更は、AngularJSイベント処理の外部で行った場合は検出されないため、コードをスコープの$apply関数にラップする必要があることに注意してください。

また、AngularJSでは、JSからのDOMの変更は一般的に「ビッグノーノー」であることに注意してください。

もちろん、コントローラーの関数もあります( "this.xxx = function().."を使用して作成されます)。それらは一種のプライベートであるため、アクセスするのが良いかどうかはわかりませんが、同じ方法でアクセスできるはずです:element(..)。controller()。method

于 2013-01-05T14:27:48.097 に答える
2

正式にはサポートされていません。確かに、いくつかのハックで技術的には可能ですが、JavaScriptからイベントハンドラーをバインドすることは、コントローラーからDOM要素にアクセスすることを意味し、AngularJSの原則に反します。

于 2013-01-05T12:43:05.200 に答える
1

@Valentynの答えをいくらか拡張するために、コントローラーメソッド($ scopeメソッドではなく)にアクセスしたい場合-たとえば、thisコントローラーコンストラクター関数(Angularホームページでは、「tabs」ディレクティブは関数を定義します)で定義されたメソッド)を使用したコントローラーの「addPane」this-使用できます

angular.element('#myid').controller().method()
于 2013-01-05T23:18:02.867 に答える
1

できますが、すべきではありません。将来的に問題が発生する可能性があります。

なぜこれを行いたいのかについてもう少し説明できれば、より良い(そしてより簡単な)方法があるかもしれません。

于 2013-01-06T20:34:19.180 に答える