Подтвердить что ты не робот

Как использовать $on в службе в angular?

я смог получить контроллер для использования $on listenener с $scope.$on.

но я не вижу никакой документации о том, как получить услуги для прослушивания событий.

Я пробовал $rootScope.$on, но это позволяет только одному слушателю. я хочу, чтобы слушатели находились в нескольких службах независимо от того, находятся ли их родительские контроллеры в области видимости или нет.

4b9b3361

Ответ 1

после экспериментов с честным битом получается, что получение событий в службу может быть выполнено с минимальным кодом.

пример кода сервиса следует в случае, если кто-то еще сталкивается с этим.

Сэмпл сохраняет и восстанавливает модель обслуживания в локальном хранилище, когда получает соответствующие трансляции

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;
}]);

Ответ 2

Так как $on - метод области, вы можете создать область в своей службе, а затем прослушать события на ней:

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');
}

fiddle

Однако я бы не рекомендовал этот подход, поскольку области действия обычно не связаны с сервисами.