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