角.如何在视图中显示异常处理程序的错误

Angular. How can i display error from exception handler on view?

本文关键字:显示 异常处理程序 错误 视图      更新时间:2023-09-26

我想在我的应用程序中捕获、自定义和显示我的所有错误和异常。所以我正在努力找到最好的方法来做到这一点。几天前我问了这个问题 AngularJS,从工厂对视图进行更改。一切都很好,直到我遇到注射问题。因此,我尝试找到在工厂视图中显示错误的最佳解决方案。

现在我有了一个观点

<div class="messages">
    <div class="message" ng-repeat="message in errors" ng-bind="message"></div>
</div>

和工厂

services.factory('$exceptionHandler',['$injector', function ($injector) {
    return function(exception, cause){
        var $rootScope = $injector.get('$rootScope');
        var $timeout = $injector.get('$timeout');
        var message;
        $rootScope.errors = $rootScope.errors || [];
        switch (exception.message){
            case 'Unexpected token A':
                message = 'Connection problem';
                break;
            default:
                message = exception.message;
        }
        $rootScope.errors.push(message);
        $timeout(function(){
            $rootScope.errors.splice(0,1);
        }, 5000);
    };
}]);

我正在尝试摆脱将范围插入服务。那么,如何在控制器中获取所有异常以显示它们呢?

您可以像这样创建一个applicationErrors服务:

angular.module('YourModule').factory('applicationErrors', function() {
   var errors = [];
   return {
      errors: errors
   };
});

然后删除异常处理程序中的$timeout$rootScope,并使用此服务来跟踪错误。您可以将其注入控制器,这就是视图访问错误的方式。

但需要注意的一件重要事情是,您需要小心不要覆盖applicationErrors中的数组。我想你可能想像这样使用它:

angular.module('YourModule').controller('YourController', ['applicationErrors', function(applicationErrors) {
   var vm = this;
   vm.errors = applicationErrors.errors;
}]);

如果用新数组覆盖applicationErrors.errorsvm.errors仍将指向以前的数组。因此,如果您想清除它,请按照以下步骤操作:

applicationErrors.errors.length = 0;

或。。。只需将其作为服务上的一种方法:

angular.module('YourModule').factory('applicationErrors', function() {
   var errors = [];
   function clear() {
      errors.length = 0;
   }
   return {
      errors: errors,
      clear: clear
   };
});