34

$onリスナーを使用するコントローラーを取得できました$scope.$on

しかし、サービスにイベントをリッスンさせる方法に関するドキュメントはありません。

を試し$rootScope.$onましたが、リスナーは 1 つしか許可されません。親コントローラーがスコープ内にあるかどうかに関係なく、複数のサービスでリスナーが必要です。

4

2 に答える 2

47

かなり実験した結果、サービスへのイベントの取得は最小限のコードで実行できることがわかりました。

他の誰かがこれに遭遇した場合に備えて、サンプル サービス コードを次に示します。

サンプルは、それぞれのブロードキャストを取得したときに、サービス モデルをローカル ストレージに保存して復元します。

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;
}]);
于 2013-05-10T23:12:37.097 に答える