我可以捕获从$编译指令抛出的所有异常吗?

时间:2015-07-27 18:42:20

标签: angularjs

我有一个Angular指令(我称之为parentDirective$compile有些childDirective并将该子指令附加到自身。拉:

// Link function of "parentDirective":
function link($scope, $elem, $attrs) {
    // ...
    var widget = $compile('<child-directive></child-directive>')($scope.$new());
    $elem.find('.some-target').append(widget);
    // ...
}

我希望能够优雅地捕获childDirective内引发的任何异常,以便我可以在parentDirective内显示一条错误消息,指出存在问题。

现在,我知道Angular有一个$exceptionHandler服务,我可以覆盖(或者我可以使用decorator添加功能而不会覆盖),但afaik这是一个全球性的事情,可以&#39 ; t用于查明首先抛出错误的childDirective实例。

我能想到的解决此问题的一种方法是在childDirective内捕获错误,然后在errorThrown的控制器API上调用parentDirective函数,但是如果所有异常都被parentController本身捕获,而没有来自childDirective的任何其他逻辑,则会更好。思考? :)

[更新] 以下是JSFiddle example我的问题。

注意:我需要暂时使用Angular 1.2.25。

1 个答案:

答案 0 :(得分:1)

长话短说不,你不能用常规错误做这件事,你可以使用范围。$ emit从孩子发出一个事件来通知父母并在那里使用$来获取事件但是如果出现常规错误,编译代码会使用try catch调用链接函数并调用$ exceptionHandler https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L2558