使用window.onerror处理JavaScript错误

时间:2016-06-17 20:46:38

标签: javascript angularjs

我正在努力处理我的错误,但不幸的是我没有成功。

在我的AngularJS App'运行'我写这段代码:

window.onerror = function (msg, url, line, col, error) {
    alert('error');
};
$timeout(() => errorrr);

虽然我确实在控制台上看到错误:

  

ReferenceError:未定义errorrr

我没有收到警报......

如果我执行相同的代码,在App' run'之外,它就能正常工作。

为什么/我该如何解决?

修改 使用angular,我无法访问$ rootScope

angular.module('app').factory('$exceptionHandler', function ($log, $rootScope) {
    return function myExceptionHandler(exception, cause) {
        $log.error(exception, cause);
        $rootScope.errors.push({
            exception: exception,
            cause: cause
        });
    };
});

它抛出

  

找到循环依赖项:$ rootScope< - $ exceptionHandler< - $ rootScope

有没有办法在这家工厂内获得$ rootscope?

1 个答案:

答案 0 :(得分:3)

正如对该问题的评论中所建议的那样,最好使用角度自己的$exceptionHandler

要解决循环注入问题,我需要使用$injector服务,如下所示:

angular.module('app').factory('$exceptionHandler', function ($log, $injector) {
    return function myExceptionHandler(exception, cause) {
        $log.error(exception, cause);
        var $rootScope = $injector.get('$rootScope');
        $rootScope.errors.push({
            string: exception.toString(),
            message: exception.message,
            lineNumber: exception.lineNumber,
            stack: exception.stack,
            cause: cause
        });
    };
});