programing

각진 서비스에서는 어떻게 $on을 사용할 수 있습니까?

sourcejob 2023. 3. 5. 09:43
반응형

각진 서비스에서는 어떻게 $on을 사용할 수 있습니까?

컨트롤러가 $on 청취자를 사용하도록 할 수 있었습니다.$scope.$on.

이벤트를 듣기 위한 서비스 제공 방법에 대한 문서가 없습니다.

나는 노력했다.$rootScope.$on단, 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;
}]);

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

만지작거리다

단, 스코프는 보통 서비스와 관련되어 있지 않기 때문에 이 접근방식은 권장하지 않습니다.

언급URL : https://stackoverflow.com/questions/16477123/how-do-i-use-on-in-a-service-in-angular

반응형