2015-07-09 5 views
0

Я пытаюсь настроить четкую обработку ошибок в моем угловом веб-приложении. У меня есть много различных вызовов api, использующих различные источники, во многих разных контроллерах и директивах. В идеале я хотел бы, чтобы обрабатывать ошибки ресурсов таким образом, как это:Лучший способ обработки/регистрации ошибок ресурса в угловом

$scope.loadData = function() { 
    $scope.loaded = false; 
    dataFactory.getData($scope.RecordId) 
    .$promise 
    .then(function (resp) { 
     $scope.Data = resp; 
     $scope.loaded = true; 
    }, function (resp) { 
     $scope.loaded = true; 
     $scope.handleResourceError(resp); 
    }) 
}; 

Поскольку я впрыснуть $ объема во всех контроллерах/директивах, которые должны были бы эти функции, я в состоянии определить метод Error ресурсов, который был бы доступная в любом месте $ scope вводится?

+0

Вам нужно будет поместить эту функцию в '$ rootScope', чтобы она была доступна везде. – jsonmurphy

ответ

1

Перехватчики могут вам помочь. вместо того, чтобы писать функцию обработчика ошибок каждый раз, вы можете просто привязать свою функцию к корневой области и называть ее формой перехватчика «responseError». Здесь я связываю функцию, чтобы открыть модель ошибки в $ rootScope, и я называю ее формой перехватчика. вы можете найти пример ниже.

Пример кода:

(function (global) { 
    "use strict"; 

    angular.module("TestAPp").factory('httpInterceptor', ["$rootScope", "$q", function ($rootScope, $q) { 
     return { 
     responseError: function (response) { 
      /* Open Error model and display error */ 
      $rootScope.openErrorModel(response); 
      /* reject deffered object so that it'll reach error block , else it'll execute success function */ 
      return $q.reject(response); 
     } 
     }; 
    }]); 

}(this)); 

// регистрации interceprtor

(function (global) { 
    "use strict"; 

    angular.module("TestApp", []) 
      .config([ '$httpProvider',function ($httpProvider) { 
       /* Register the interceptor */ 
       $httpProvider.interceptors.push('httpInterceptor'); 

    }]); 

}(this)); 

PS: Мое определение openErrorModel

$rootScope.openErrorModel = function (error) { 
     $rootScope.errorMessage = error.data; 
     $('#errorModal').modal('show'); 
}; 

Вы можете обратиться к Error Handling in angular для получения дополнительной информации.

Смежные вопросы