如何让Angular在Angular错误上显示错误?

时间:2014-05-20 14:22:04

标签: angularjs

我已经接管了另一位开发者的Angular应用程序。

现在我一直在玩它并进行首次编辑。

问题是:当我绑定到不存在的元素(或犯任何其他错误)时,我没有看到任何错误,这听起来不错但不是因为我希望在做某事时得到通知错。

如何让Angular显示错误?

2 个答案:

答案 0 :(得分:6)

首先,我建议不使用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");
    };
});       

答案 1 :(得分:4)

默认情况下,AngularJS是宽容的,也就是说,如果你绑定了一个未定义的值,它更喜欢不显示任何内容而不是抛出异常。

来自Angular doc:

  

在JavaScript中,尝试评估undefined   属性生成ReferenceErrorTypeError。在Angular,   表达式评估是对undefinednull的宽容。

显示错误的一种方法是装饰$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