[更新] さて、あなたはあなたの問題を解決したように見えるので、私はあなたの質問を誤解しているようですが、おそらく他の人は質問のタイトルに基づいてこの情報に出くわすでしょう.
回答の前に次の警告を付けておきます。AngularJS アプリケーションを作成している場合は、Angular アプリケーションのライフサイクルの外に出て作成するのではなく、ディレクティブなどの Angular が提供する機能を使用して、この種の作業を行うことをお勧めします。ただし、質問に対する学術的な回答のために、ここにあります。
概要
ここでアクセスしようとしている Angluar マジックは、いくつかの機能に基づいています。
スコープ(ドキュメント)
スコープは、Angular 式 (属性と二重のカーリーに入れるもの) のコンテキストを提供し、そのコンテキストでのこれらの式の評価の変化を監視するために必要な関数を提供します。たとえばScope#$watch
、式の評価が変化するたびに実行されるコールバックを登録できます。
$interpolate (ドキュメント)
Interpolate は、二重巻き線内に式を含むことができる文字列を受け取り、式の結果が元の文字列に補間された新しい文字列に変換します。(呼び出し$interpolate(str)
は、スコープを提供するオブジェクトに対して呼び出されると、文字列を返す関数を返します。)
それを一緒に入れて
Angular アプリを作成する場合、多くの場合、これらの詳細について心配する必要はありません。コントローラーには自動的にスコープが渡され、DOM テキストは自動的に補間されます。Angular アプリのライフサイクル外でこれらのものにアクセスしようとしているので、以前は隠れていたこれらのフープのいくつかをジャンプする必要があります。
angular.injector (ドキュメント)
app.controller
、などを使用してモジュールにサービス、フィルター、ディレクティブなどを登録するapp.factory
と、指定した関数がインジェクターによって呼び出されます。Angular は Angular アプリで作成しますが、ここでは使用しないため、使用angular.injector
して自分で作成する必要があります。
インジェクターを取得したらinjector.invoke(fn)
、関数を実行し、関数内で使用するfn
依存関係 ( など$interpolate
) を注入するために使用できます。
簡単な例
これは非常に基本的な例です
- 入力と変数の間の双方向データバインディングを提供します
- を使用して、HTML ビューへのデータ バインディングを提供します。
$interpolate
Name: <input id="name" type="text" autocomplete="off">
<button id="setname">Set name to Bob</button>
<div id="greeting"></div>
var injector = angular.injector(['ng']);
injector.invoke(function($rootScope, $interpolate) {
var scope = $rootScope.$new();
var makeGreeting = $interpolate("Hello {{name}}!");
scope.$watch('name', function() {
var str = makeGreeting(scope);
$("#greeting").text(str);
$("#name").val(scope.name);
});
var handleInputChange = function() {
scope.$apply(function() {
scope.name = $('#name').val();
});
};
var setNameToBob = function() {
scope.$apply(function() {
scope.name = "Bob";
});
};
$("#name").on('keyup', handleInputChange);
$("#setname").on('click', setNameToBob);
handleInputChange();
});
この手法を示す jsFiddle は次のとおりです: http://jsfiddle.net/BinaryMuse/fTZu6/