development

$ exceptionHandler 구현을 재정의하는 방법

big-blog 2020. 10. 25. 12:34
반응형

$ exceptionHandler 구현을 재정의하는 방법


자바 스크립트 예외가 발생할 때마다 수행하고 싶은 추가 작업이 있습니다.

문서에서 $exceptionHandler:

각도 표현식에서 포착되지 않은 예외는이 서비스에 위임됩니다. 기본 구현은 단순히 브라우저 콘솔에 로그인하는 $ log.error에 위임합니다.

"기본 구현"이라는 사실은 서비스에 대한 자체 구현을 제공 할 수있는 방법이 있다고 생각하게 만들고 예외가 발생했을 때 원하는 작업을 수행합니다. 제 질문은, 어떻게 이것을합니까? 이 서비스에 대한 모든 예외를 유지하면서 원하는 기능을 제공하려면 어떻게해야합니까?


내가 찾은 또 다른 옵션 $exceptionHandler$ provide.decorator 함수를 통해 "장식"하는 것입니다. 이는 사용자 정의 구현의 일부로 사용하려는 경우 원래 구현에 대한 참조를 제공합니다. 따라서 다음과 같이 할 수 있습니다.

mod.config(function($provide) {
    $provide.decorator("$exceptionHandler", ['$delegate', function($delegate) {
        return function(exception, cause) {
            $delegate(exception, cause);
            alert(exception.message);
        };
    }]);
});

원래 예외 처리기가 수행하는 작업과 사용자 지정 기능을 수행합니다.

업데이트 된 바이올린을 참조하십시오 .


$exceptionHandler동일한 이름으로 서비스를 생성 하여 기능을 재정의 할 수 있습니다 .

var mod = angular.module('testApp', []);

mod.factory('$exceptionHandler', function () {
    return function (exception, cause) {
        alert(exception.message);
    };
});

샘플 이 바이올린참조하십시오 . 공장 정의를 주석 처리하면 $exceptionHandler경고하는 대신 콘솔에 오류가 기록되는 것을 볼 수 있습니다.

다음은 using 과 같은 다른 서비스를 주입하는 예제 가있는 그룹 스레드 입니다 .$http$injector

참고 : 기존 기능 $exceptionHandler(또는 다른 기본 제공 서비스) 을 덮어 쓰지 않으려면 이 답변 에서 서비스 장식 방법에 대한 정보를 참조하십시오 .


$ cookieStore도 모든 서비스 / 공장을 재정의 할 수 있습니다. 본격적인 구성 가능한 객체를 원한다면 여기 에 정말 좋은 예가 있습니다 .

var myApp = angular.module('myApp', []);

//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!"
            }
        }
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {

   helloWorld.sayHello(),
}

참고 URL : https://stackoverflow.com/questions/13595469/how-to-override-exceptionhandler-implementation

반응형