3

ngdialog を使用して 401 ステータスを処理したいのですが、次のエラーが表示されます:Uncaught Error: [$injector:cdep]

angular.module('ws.site.master', [
      'ngResource',
      'ngCookies',
      'ngSanitize',
      'ngAnimate',
      'ui.router',
      'ngDialog'
    ]);

ここで、401 ステータスを処理するファクトリを追加します。

angular.module('ws.site.master').factory('authHttpResponseInterceptor',['$q','$location','ngDialog',function($q,$location,ngDialog){
  return {
    response: function(response){
      if (response.status === 401) {
        console.log("Response 401");
      }
      return response || $q.when(response);
    },
    responseError: function(rejection) {
      if (rejection.status === 401) {
        console.log("Response Error 401",rejection);
        ngDialog.open({
          template: '/common/templates/at.modal.security.html',
          className: 'ngdialog-theme-default modal-security',
          closeByDocument: false,
          closeByEscape: false,
          trapFocus: false,
          controller: ['$scope', function($scope) {
            $scope.defaultView = defaultView || 'login';
          }]
        });
        $rootScope.isSecurityModal = true;
      }
      return $q.reject(rejection);
    }
  }
}]);

ここで authHttpResponseInterceptor を $httpProvider に追加します

angular.module('ws.site.master').config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', 'ROUTE',
  function ($stateProvider, $urlRouterProvider, $locationProvider, $httpProvider, ROUTE) {
    $locationProvider.html5Mode(true);
    angular.forEach(ROUTE, function(_route, _name){
      $stateProvider.state(_name, _route);
    });
    $urlRouterProvider.otherwise('/');
    $httpProvider.interceptors.push('authHttpResponseInterceptor');
  }
]);
4

2 に答える 2