从 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"; });
我正在覆盖默认 $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"; });