我在我的应用程序中使用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)
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中得到解决。
答案 0 :(得分:5)
这显然是Firebug中的一个错误。其代码中的相关行是这一行:
如果您希望修复此问题,则应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})
};
}
};
});