从 chrome repl 关闭 angular $exceptionHandler

Fire off angular $exceptionHandler from chrome repl

我正在覆盖默认 $exceptionHandler,类似于 angular 网站上看到的:https://docs.angularjs.org/api/ng/service/$exceptionHandler

效果很好。

但是,我不太清楚如何 'watch' 这个过程,当没有 $emit 一个命名事件时,它的处理程序明确地将错误(召唤或其他方式)传递到 $ exceptionHandler(在`.directive || .config || .service | .运行 || etc...中注入)。

TL:DR - 我想知道如何模拟一个未处理的异常,默认的 angular $exceptionHandler 是用来获取的 - 特别是从 chrome console/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"; });