AngularJS自体は、データとコードの共有と再利用を実現するための指令やサービスサービスなどの方法を提供しています。ただし、実際のプロジェクト開発では、おそらく怠zyであるか便利であるため、2つのコントローラー間でデータ共有を直接伝えるか、機能とメソッドを通話することをお勧めします。ここでは、どの方法がこの要件を満たすことができるかを確認します。
シングルトンサービス
Singleton Serviceは、AngularJS自体がサポートするデータおよびコード共有方法です。シングルトンであるため、すべてのコントローラーが同じデータにアクセスします。たとえば、次のサービスを実装できます。
Angular .Module( 'App').Service( 'objectService'、[objectService]); function objectService(){var list = {}; return {get:function(id){return list [id]; }、set:function(id、v){list [id] = v; }};} 1つのコントローラーでは、 ObjectService.set('i', 1)によってデータセットを他のコントローラーのObjectService.get('i')を介して取得できます。
放送とイベント
AngularJSでは、イベントをトリガーして放送を送信するときにパラメーターを渡すことができます。この機能は、データ共有を実現するために使用できます。イベントと放送に関連する3つの方法があります。
1. $ emit():トリガーイベント、たとえば、子コントローラーを親コントローラーに、コントローラーを$ rotscopeに渡すことができます。
2. $ broadcast():放送を送信します。これにより、データを渡すことができます。たとえば、親コントローラーはデータを子コントローラーに渡すか、 $ rotscopeがデータを任意のコントローラーに渡すことができます。
3. $ on():イベントやブロードキャストを聞いて、 $ emitと$ broadcastをキャプチャできます
コントローラー間の通信は、3つの状況に分けることができます。
1.直接関連コントローラーなし: $ rotscopeを使用します。$ emit()、$ rotscope。$ boardcast ()または$ scope。
2。親コントローラーからチャイルドコントローラー:親コントローラーは$ scopeを使用します。$ boradcast()データを送信し、子コントローラーは$ scope。$ on()を使用してデータを取得します
3.子コントローラーから親コントローラーへ:子コントローラーは$ scopeを使用します。$ emit()データを送信し、親コントローラーは$ scope。$ on()を使用してデータを取得します。
簡単な使用法は次のとおりです。
// 1つのControlerRangular .Module( 'App').Controller( 'onecontroller'、['$ scope'、onecontroller]); function onecontroller($ scope){var data = {value: 'test'}; $ Rootscope。$ broadcast( 'open.notice.editor'、data);} // otherrangular .module( 'app').controller( 'anothercontroller'、['$ scope'、anothercontroller]); function anothercontroller($ scope){$ scope。 $ scope.open(data);親コントローラー
両方のコントローラーが同じ親コントローラーを一緒に共有する場合、親コントローラーを介してデータ共有と通信を実行できます。例えば:
<div ng-controller = "ParentController"> <div ng-controller = "ChildoneController"> </div> <div ng-controller = "ChildTwoController"> </div> </div>
//親コントローラーAngular .Module( 'App').Controller( 'ParentController'、['$ Scope'、ParentController]); function parentController($ scope){//データを渡すための変数$ scope.data = null;} ['$ scope'、Childonecontroller]); function Childonecontroller($ scope){//データの設定$ scope。$ parent.data = 1;} // ChildController Angular .Module( 'app').Controller( 'ChiredTwoController'、['curthtwocontroller'、 '$ scope'、 '$ TimeTwoot'; ChildTwoController($ Scope、$ Timeout){$ Timeout(function(){// data read console.log($ scope。$ parent.data);}、1000);}グローバルまたは共有変数
AngularJSは、 $ウィンドウと$ localStorageの2つの変数のカプセル化を提供します。これらの2つの値を変更および聴くことにより、コントローラー間のデータ共有と通信を実現できます。この方法は次のとおりです。
// 1つのControlerRangular .Module( 'app').controller( 'onecontroller'、['$ scope'、 '$ window'、onecontroller]) ['$ scope'、anothercontroller])); function anothercontroller($ scope){// $ scopeの変更を聞きます。実際、この監視および変更方法は、他の通信方法でも使用できます。
要素結合
AngularJSでは、要素を介してコントローラーインスタンスを取得できます。これにより、すばやく入手できます
コントローラーのデータを変更するか、このコントローラーのメソッドを呼び出します。例えば:
<div ng-controller = "appcontroller"> <div id = "div-a"> </div> </div>
次の方法でコントローラーインスタンスを取得できます。
var instance = angular.element(document.getElementById( 'div-a'))。scope();
次に、このインスタンスを使用して、コントローラーのメソッドを呼び出して値を取得および変更できます。要素自体がコントローラーを持つかどうか、または要素の親要素がコントローラーを持つかどうかを正常に取得することはできません。
これは、角度コントローラー間のデータ共有と通信に関するものです。 Angularjsのデータを共有する知識に興味がある友人は、一緒に学ぶことができます。 wulin.comへのご支援ありがとうございます。