私はリスナー の$を$scope.$on
で使用するようにコントローラを取得できました。
しかし、イベントを受信するサービスを取得する方法に関するドキュメントはありません。
私は$rootScope.$on
を試しましたが、それは1つのリスナーしか許可しません。親のコントローラが有効範囲内にあるかどうかにかかわらず、複数のサービスでリスナーが必要です。 $on
以来
私はリスナー の$を$scope.$on
で使用するようにコントローラを取得できました。
しかし、イベントを受信するサービスを取得する方法に関するドキュメントはありません。
私は$rootScope.$on
を試しましたが、それは1つのリスナーしか許可しません。親のコントローラが有効範囲内にあるかどうかにかかわらず、複数のサービスでリスナーが必要です。 $on
以来
公正なビットを試した結果、サービスへのイベントを最小限のコードで処理できることが判明しました。
他に誰かがこの問題に遭遇した場合のサンプルサービスコードです。
サンプルは、ローカルストレージにサービスモデルを保存し、復元することは、それぞれのブロードキャストを取得します
app.factory('userService', ['$rootScope', function ($rootScope) {
var service = {
model: {
name: '',
email: ''
},
SaveState: function() {
sessionStorage.userService = angular.toJson(service.model);
},
RestoreState: function() {
service.model = angular.fromJson(sessionStorage.userService);
}
}
$rootScope.$on("savestate", service.SaveState);
$rootScope.$on("restorestate", service.RestoreState);
return service;
}]);
私は唯一これは技術的にはファクトリオブジェクトであることを知っていますか?それは 'app.service( 'myActualService'、...)でサービスコンストラクタを呼び出しません。 – BradGreens
@BradGreens、私は自分自身を困惑させるそのapp.factoryは、角度のあるサービスを定義する「方法」としてリストされています。これが間違っていると正しい方法で表示されてうれしいです – Anton
うん、私はあなたと一緒です。私はたいていの場合、 'this'プロパティを使う本当のシングルトンのための' app.service'ユーザです。私はこの「工場」を明日の 'サービス'に移植して、その違いの概要を助けることを期待してショットを取ることができます。正直なところ、私のアプリケーションでは、すべてのサービスを工場と交換することができ、最終結果に違いは見られません。 – BradGreens
は、あなたがそれにイベントをリッスン、その後、あなたのサービスにスコープを作成することができ、スコープの方法である:
app.factory('myService', function($rootScope) {
var scope = $rootScope.$new(); // or $new(true) if you want an isolate scope
scope.$on('testEvent', function() {
console.log('event received');
})
return {}
});
function MyCtrl($scope, myService, $rootScope) {
$rootScope.$broadcast('testEvent');
}
しかし、私は以来、このアプローチをお勧めしませんスコープは通常サービスに関連付けられていません。
なぜあなたは、単にコントローラにサービスを注入し、コントローラは、サービスメソッドを呼び出してみましょういけません。イベントを使用する必要はありません。あなたが何かに注入しないと、サービスが作成されません。 – Tosh
私は複数のコントローラを持っており、それぞれにサービスがあり、すべてのサービスに通知する必要があります。アクティブなコントローラーだけではありません。 – Anton
@Anton:サービスはデフォルトではシングルトンです。つまり、1つのコントローラーでサービス変数を変更すると、同じオブジェクトから変更されます。 – ganaraj