2016-09-12 16 views
0

Angularjsのコントローラ間でいくつかのオブジェクトを共有する必要がありますが、動作するものを作っていますが、ちょっとしたものです。私が持っているものが受け入れられるのか、そうするのが好ましい方法があるのか​​どうか疑問に思っています。Angularjsのコンポーネント/コントローラ間のオブジェクトへのアクセス

componentAには、componentBからアクセスしたいオブジェクトがあります。

app.component("componentA", { 
    controller: function ($scope, $rootScope, $compile) { 

     //the object whose contents I want 
     $scope.objectToAccess = {name: 'object', value: 3}; 

     //receives broadcast from componentB, returns the object 
     $rootScope.$on("getObject", function() { 
      $rootScope.$broadcast('receiveObject', $scope.objectToAccess); 
     }); 
    } 
} 

app.component("componentB", { 
    controller: function ($scope, $rootScope, $compile) { 

     $scope.object = {name : null, value: null}; 

     //receives the broadcast of the object and sets the value 
     $rootScope.$on("receiveObject", function (event,object) { 
      console.log(object); 
      $scope.object = object; 
     }); 

     //broadcast to get the object contents 
     $rootScope.$broadcast('getObject'); 
    } 
} 

これは機能しますが、多くの前後の通信では複雑すぎます。このようなことを処理するために特別に設計されたAngularに組み込まれているものは何ですか?

+0

私はあなたのやっていること(放送)がコントローラ間で通信する正しい方法だと思います。 –

+0

例から分かるように、 'componentA'と' componentB'の関係が何であるかは分かりません。彼らはコンポーネントを兄弟ですか?その場合、親コンポーネントを作成することを検討してください。その2つは '$ onChange'イベントをリッスンし、それに応じて反応することができます。あなたが書いたものは動作しますが、可能であれば '$ broadcast'を置き換えることが望ましいです。 – mcranston18

+0

あなたができる別のことは、 $ rootScope.objectToaccess = {name: 'object'、value:3} のようにrootScopeにobjectToaccessを入れてから、それを$ rootScope.objectToaccess 。 しかし、オブジェクトをグローバル化するのでお勧めしません。これを行う最も良い方法は、このobjectToaccessオブジェクトを持つサービスを作成し、objectToaccessにアクセスするコントローラの依存関係としてサービスを渡したり注入したりすることです。 –

答えて

1

私の意見では、$ scopeイベントは、データの変更が購読され、要求されていない場合に使用する必要があります。

代わりに、データを保持し、コントローラで参照するサービスを使用できます。サービスはシングルトンなので、コントローラは両方とも同じインスタンスを共有するため、データを簡単に共有できます。

+0

アドバイスをいただきありがとうございます。私はまだAngularの新人ですので、私はサービスに精通していません。私の現在の状況に関連することができるチュートリアルやいくつかの情報源を提供する可能性はありますか?私は大いに感謝します。ありがとう。 – user1852176

+0

このplunk [link](https://plnkr.co/edit/2t2zec8GHHoTc9zy4DnO?p=preview)を見てください。入力ボックスに入力されたデータは、コンポーネント/コントローラ間で共有されます。 –

+0

このために "親"コントローラを作成する必要がありますか? – user1852176

関連する問題