Angularjs 如何让角度误差在角度误差上显示误差?
我已经从另一个开发者那里接管了一个角度的应用程序 现在我一直在玩它,并做我的第一次编辑 问题是:当我绑定到不存在的元素(或犯任何其他错误)时,我看不到任何错误,这听起来不错,但不是因为我想在做错事时得到通知Angularjs 如何让角度误差在角度误差上显示误差?,angularjs,Angularjs,我已经从另一个开发者那里接管了一个角度的应用程序 现在我一直在玩它,并做我的第一次编辑 问题是:当我绑定到不存在的元素(或犯任何其他错误)时,我看不到任何错误,这听起来不错,但不是因为我想在做错事时得到通知 如何生成角度显示错误?默认情况下,AngularJS是宽容的,也就是说,如果绑定了未定义的值,它宁愿不显示任何内容,也不愿抛出异常 从角度文档: 在JavaScript中,尝试计算未定义的 属性生成ReferenceError或TypeError。在角度上, 表达式计算允许未定义和空 显示错
如何生成角度显示错误?默认情况下,AngularJS是宽容的,也就是说,如果绑定了未定义的值,它宁愿不显示任何内容,也不愿抛出异常 从角度文档: 在JavaScript中,尝试计算未定义的 属性生成
ReferenceError
或TypeError
。在角度上,
表达式计算允许未定义
和空
显示错误的一种方法是修饰$eval
函数,该函数用于计算绑定表达式
您可以尝试以下方法:
app.run(function($rootScope) {
var origRootScope = $rootScope,
origEval = origProvider.$eval;
//Override rootScope's $eval with our own
origProvider.$eval = function(expression, locals) {
// Test the expression value and add the behavior you like
if(typeof expression === 'undefined') {
// Log some kind of error
console.log('Some kind of error')
}
// Call the original $eval function
var returnValue = origEval.apply(this, arguments);
return returnValue;
}
});
我没有尝试过该代码,但您应该能够通过这种方式将自定义日志添加到
$eval
。首先,我建议不要使用angular的缩小版本,因为未统一的版本允许在控制台中记录更连贯和清晰的错误
接下来,我认为处理角度错误的最好方法是编写一个自定义包装器来更好地处理它们。下面是一个如何编写包装器的示例
第一步是编写一个函数,以您想要的方式处理错误。这就是我处理当前角度误差的方式注意:这可以通过多种不同的方式进行修改,以使错误处理更加定制
function HandleAngularError(Exception, AppName){
try {
var AppName = (window.parent._.isEmpty(AppName) ? "Angular App Unspecified" : AppName) + " - ";
if (window.parent._.isUndefined(Exception)) {
console.log(strAppName + "error: exception undefined", "AngularJs");
} else {
console.log(strAppName + "error: " + Exception.toString() + " " + JSON.stringify(Exception), "AngularJs");
}
} catch (e) {
alert("Handle Angular Error: " + Exception.toString() + " " + JSON.stringify(Exception));
}
}
下一步是在项目中的任何模块中包含错误处理函数,然后依靠$exceptionHandler将角度错误传递到自定义包装中,如下所示:
angular.module("someApp",[], function(){
//setup stuff here
}).factory( '$exceptionHandler', function () {
return function (exception) {
HandleAngularError(exception, "someApp");
};
});