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に組み込まれているものは何ですか?
私はあなたのやっていること(放送)がコントローラ間で通信する正しい方法だと思います。 –
例から分かるように、 'componentA'と' componentB'の関係が何であるかは分かりません。彼らはコンポーネントを兄弟ですか?その場合、親コンポーネントを作成することを検討してください。その2つは '$ onChange'イベントをリッスンし、それに応じて反応することができます。あなたが書いたものは動作しますが、可能であれば '$ broadcast'を置き換えることが望ましいです。 – mcranston18
あなたができる別のことは、 $ rootScope.objectToaccess = {name: 'object'、value:3} のようにrootScopeにobjectToaccessを入れてから、それを$ rootScope.objectToaccess 。 しかし、オブジェクトをグローバル化するのでお勧めしません。これを行う最も良い方法は、このobjectToaccessオブジェクトを持つサービスを作成し、objectToaccessにアクセスするコントローラの依存関係としてサービスを渡したり注入したりすることです。 –