从chrome repl中取消角度$ exceptionHandler

时间:2017-01-25 21:57:55

标签: angularjs exceptionhandler

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

效果很好。

然而,我不清楚如何观看'这个过程不是$emit一个命名事件,其处理程序显式将错误(变形或其他)传递给$ exceptionHandler(在.directive || .config中注入) || .service | .run || etc ...)。

TL:DR - 我想知道如何模拟一个未处理的异常,默认的角度$ exceptionHandler应该选择 - 特别是从chrome console / REPL?

1 个答案:

答案 0 :(得分:1)

您需要在摘要循环中运行生成异常的代码。更具体地说,您需要将其传递给$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"; });