2016-04-17 4 views
0

Возможно, я $scope.$on(... собираю эфир.

У меня есть перехватчик для захвата ошибок ответа HTTP и трансляции события, на которое может реагировать мой главный контроллер.

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .factory('httpErrorInterceptor', httpErrorInterceptor); 

    httpErrorInterceptor.$inject = ['$rootScope', '$q']; 

    function httpErrorInterceptor($rootScope, $q) { 
     return { 
      responseError: function (rejection) { 
       var firstDigit = rejection.status.toString().substr(0, 1); 

       if (firstDigit === "4") { 
        $rootScope.$broadcast('client_error', rejection); 
       } 
       else if (firstDigit === "5") { 
        $rootScope.$broadcast('server_error', rejection); 
       } 

       return $q.reject(rejection); 
      } 
     }; 
    } 
})(); 

В моем приложении я намеренно отправляю некоторые неверные данные в API и получаю обратно http 400.

Я вижу в инструментах разработчика Chrome, что ударяется $rootScope.$broadcast('client_error', rejection);.

Проблема заключается в том, что это не получить удар:

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .controller('main', main); 

    main.$inject = ['$scope', '$window', 'authenticationService', 'shoppingBasketService']; 

    function main($scope, $window, authenticationService, shoppingBasketService) { 
     // Scope functions. 
     $scope.$on('server_error'), function (event, error) { 
      console.log('handling server_error', error); 
     }; 

     $scope.$on('client_error'), function (event, error) { 
      console.log('handling client_error', error); 
     }; 

     .... 

     .... 

Объем загрузки. Почему он не реагирует на трансляцию?

ответ

2

Возможно, были другие ошибки в коде, который вы не указали, но ваш код, прослушивающий события, неверен. Это должно быть:

$scope.$on('server_error', function(event, error) { 
    console.log('handling server_error', error); 
}); 

Здесь a plunkr showing that it works.

+0

Ах, как я пропустил этот кронштейн ...?! Спасибо. – PeteGO

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