AngularJS不再在Firebug控制台中显示特定错误

时间:2015-09-29 05:08:11

标签: javascript angularjs firebug angular-material

我在我的应用程序中使用AngularJS和angular-material库。 问题是,每当控制器的任何功能发生任何错误时,它都不会显示特定的错误,而是每次显示相同的一般错误,通过查看哪些不能确定哪里出错。

以下是我的控制台中显示的错误。

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)

以下是该错误的屏幕截图。 Error as shown in Firebug

PS:我正在使用RequireJS JavaScript库来延迟加载我的应用程序。我也在我的应用程序中使用ui.router。

更新1: stackFrame.js不是我的应用程序的JavaScript文件。 stackFrame.js的位置是:

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

即使我在应用程序中遇到不同的错误,它总是在我的应用程序中在任何控制器的同一行显示相同的错误。

更新2:

禁用Firebug工作。它显示了Firefox和Chrome控制台中的特定错误。 我想补充一点,当$http.post()的响应函数内部出现错误时,Firebug中会显示此类错误。测试更多案例。

更新3:

参考https://github.com/firebug/firebug/issues/7948,这个问题已在firebug 2.0.13中得到解决。

2 个答案:

答案 0 :(得分:5)

这显然是Firebug中的一个错误。其代码中的相关行是这一行:

https://github.com/firebug/firebug/blob/a389cf78b310aedf33531520cc11f1e05051ecc3/extension/content/firebug/debugger/stack/stackFrame.js#L357

如果您希望修复此问题,则应file a bug report for Firebug

答案 1 :(得分:1)

您可以在AngularJs中使用自定义异常处理。

var avro = require('avsc');

// Parse the schema.
var logType = avro.parse({
  "namespace": "com.company.wr.messages",
  "type": "record",
  "name": "Log",
  "fields": [
    {"name": "timestamp", "type": "long"},
    {"name": "source", "type": "string"},
    {"name": "version", "type": "string"},
    {"name": "ipAddress", "type": "string"},
    {"name": "name", "type": "string"},
    {"name": "level", "type": "string"},
    {"name": "errorCode", "type": "string"},
    {"name": "message", "type": "string"}
  ]
});

// A sample log record.
var obj = {
  timestamp: 2313213,
  source: 'src',
  version: '1.0',
  ipAddress: '0.0.0.0',
  name: 'foo',
  level: 'INFO',
  errorCode: '',
  message: ''
};

// And its corresponding Avro encoding.
var buf = logType.toBuffer(obj);

在允许调用进入默认实现之前,它会将所有错误发送到$ rootScope进行数据绑定(addError是$ rootScope上的自定义方法,而$ delegate表示正在修饰的服务)。

错误服务封装了一些常见的逻辑。

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);
        };
    });

});

处理错误:

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