【问题标题】:How to globally access/throw a custom error in angular?如何全局访问/抛出角度的自定义错误?
【发布时间】:2015-08-18 15:12:01
【问题描述】:

我想创建自己的自定义错误,如下所示:

function CustomError(message) {
   Error.captureStackTrace(this);
   this.message = message;
   this.name = "SomeCustomError";
}
CustomError.prototype = Object.create(Error.prototype);

我应该如何在 Angular 中集成自定义错误?无论是在服务、控制器还是类似的地方,我都可以在任何有角度的地方抛出相同的自定义错误。我当然不想每次都“依赖注入”CustomError。

throw CustomError('some message');

或者,如果我正在考虑,我也可以简单地:

throw {name : "CustomError", message : "some message"};

有什么想法吗?

【问题讨论】:

  • 如果我理解正确,您想覆盖默认的异常处理程序吗?如果是这样,请查看文档:docs.angularjs.org/api/ng/service/$exceptionHandler。看来您还可以添加功能,同时使用装饰器保留原始异常处理功能:stackoverflow.com/questions/13595469/…
  • 不,我已经这样做了。我只是想定义我自己的自定义错误,我不知道如何让它在 Angular 中全局可用。
  • 嗯,似乎有一个选项可以创建然后将服务添加到 rootScope,这样您就不必不断地将其注入:stackoverflow.com/questions/14571714/…。不过,不确定它是否仍然满足您的要求?
  • 好吧,实际上我也可以在我的 Angular 引导函数期间将它附加到 $window 的某个位置。只是一个想法,也许还不错……
  • 听起来很有趣。发布您的最终解决方案。

标签: javascript angularjs error-handling


【解决方案1】:

在我的 app.js - 引导文件中,我现在有类似的内容:

angular.module('myApp')
    .run(['$window',
        function($window) {

            function CustomError(message) {
                Error.captureStackTrace(this);
                this.message = message;
                this.name = "SomeCustomError";
            }
            CustomError.prototype = Object.create(Error.prototype);

            $window.CustomError = CustomError;
            // From here on, I can throw it anywhere: 
            // throw new CustomError("D'oh!");
        }
    ]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2019-02-14
    • 2016-12-06
    • 1970-01-01
    • 2016-08-26
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多