Angularjs 从chrome repl启动$exceptionHandler

Angularjs 从chrome repl启动$exceptionHandler,angularjs,exceptionhandler,Angularjs,Exceptionhandler,我正在覆盖默认的$exceptionHandler,类似于angular网站上的内容:$exceptionHandler 效果很好 然而,我还不清楚当一个命名事件的处理程序不发出($emit)时,如何“观察”这个过程,该事件的处理程序会显式地将错误(变戏法或其他方式)传递到$exceptionHandler中(在“.directive | | | config | service |.run |等”中注入) TL:DR-我想知道如何模拟默认angular$exceptionHandler要拾取的

我正在覆盖默认的
$exceptionHandler
,类似于angular网站上的内容:$exceptionHandler

效果很好

然而,我还不清楚当一个命名事件的处理程序不发出(
$emit
)时,如何“观察”这个过程,该事件的处理程序会显式地将错误(变戏法或其他方式)传递到$exceptionHandler中(在“.directive | | | config | service |.run |等”中注入)


TL:DR-我想知道如何模拟默认angular$exceptionHandler要拾取的未处理异常-特别是从chrome控制台/REPL?

您需要在摘要循环中运行生成异常的代码。更具体地说,您需要将其传递给
$apply
,因为
$digest
本身不使用
$exceptionHandler

$apply的伪代码

function $apply(expr) {
  try {
    return $eval(expr);
  } catch (e) {
    $exceptionHandler(e);
  } finally {
    $root.$digest();
  }
}
例如,您可以从控制台执行以下操作:

window.test = function(fn) {
  angular.element(document.querySelector('.ng-scope'))
  .injector()
  .get('$rootScope')
  .$apply(fn);
}

window.test(function () { var a = b; });

window.test(function () { throw "Error"; });