Подтвердить что ты не робот

AngularJS больше не показывает конкретные ошибки в консоли Firebug

Я использую AngularJS вместе с библиотекой angular -материал в моем приложении. Проблема в том, что всякий раз, когда какая-либо ошибка возникает в любой функции контроллера, она не отображает конкретную ошибку, но вместо этого отображает одну и ту же общую ошибку каждый раз, глядя на которую вы не можете определить, что пошло не так.

Вот ошибка, показанная на моей консоли.

TypeError: href is null   stackFrame.js (line 357)
consoleLog/<()   angular.js (line 12416)
$ExceptionHandlerProvider/this.$get</<()   angular.js (line 9203)
processQueue()   angular.js (line 14642)
scheduleProcessQueue/<()   angular.js (line 14650)
$RootScopeProvider/this.$get</Scope.prototype.$eval()   angular.js (line 15878)
$RootScopeProvider/this.$get</Scope.prototype.$digest()   angular.js (line 15689)
$RootScopeProvider/this.$get</Scope.prototype.$apply()   angular.js (line 15986)
done()   angular.js (line 10511)
completeRequest()   angular.js (line 10683)
requestLoaded()   angular.js (line 10624)

Вот скриншот этой ошибки. Ошибка, как показано в Firebug

PS: Я использую JavaScript-библиотеку RequireJS для ленивого загрузки моего приложения. Я также использую ui.router в своем приложении.

Обновление 1: stackFrame.js не является файлом JavaScript моего приложения. Местоположение stackFrame.js:

chrome://firebug/content/debugger/stack/stackFrame.js

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

Обновление 2:

Отключение Firebug. Он показывает конкретную ошибку в консоли Firefox и Chrome. Я хотел бы добавить, что этот тип ошибки показан в Firebug, когда в функции ответа $http.post() есть ошибка. Тестирование дальнейших случаев.

Обновление 3:

Что касается https://github.com/firebug/firebug/issues/7948, эта проблема была решена в firebug 2.0.13.

4b9b3361

Ответ 2

Вы можете использовать настраиваемую обработку исключений в AngularJs.

app.config(function($provide){

    $provide.decorator("$exceptionHandler", function($delegate, $injector){
        return function(exception, cause){
            var $rootScope = $injector.get("$rootScope");
            $rootScope.addError({message:"Exception", reason:exception});
            $delegate(exception, cause);
        };
    });

});

Он отправит все ошибки в $rootScope для привязки данных, прежде чем разрешить вызов перейти к реализации по умолчанию (addError - это настраиваемый метод в $rootScope, а $delegate - это украшаемый сервис).

чтобы инкапсулировать часть общей логики.

app.factory("errors", function($rootScope){
    return {
        catch: function(message){
            return function(reason){
                $rootScope.addError({message: message, reason: reason})
            };
        }
    };
});

Ошибка обработки:

 TestService.doWork().then()               
        .catch(errors.catch("Could not complete work!"));