一尘不染

如何重写$ exceptionHandler实现

angularjs

每当抛出javascript异常时,我们还想做一些额外的事情。

从以下文档$exceptionHandler

角度表达式中任何未捕获的异常都委托给此服务。默认的实现只是将$ log.error委托给浏览器控制台。

它说“默认实现”的事实使我认为有一种方法可以为服务提供我们自己的实现,并在引发异常时做我们想要的事情。我的问题是,你如何做到这一点?我们如何使所有异常都保留给该服务,然后提供我们希望发生的功能?


阅读 359

收藏
2020-07-04

共1个答案

一尘不染

我为此找到的另一个选择是$exceptionHandler通过$
provide.decorator
函数“装饰”
。如果要将原始实现用作自定义实现的一部分,则可以为您提供参考。因此,您可以执行以下操作:

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

它将执行原始异常处理程序所做的事情,以及自定义功能。

请参阅此更新的小提琴

2020-07-04