Javascript例外がスローされるたびに、やりたいことがいくつかあります。
$exceptionHandler
のドキュメントから:
angular式のキャッチされない例外は、このサービスに委任されます。デフォルトの実装は、ブラウザコンソールにログインする$ log.errorに委任するだけです。
「デフォルトの実装」と書かれているという事実は、サービスに独自の実装を提供し、例外がスローされたときに必要なことを行う方法があると思うようにします。私の質問は、これをどのように行うのですか?このサービスへのすべての例外を保持しつつ、実現したい機能を提供するにはどうすればよいですか?
このために私が見つけた別のオプションは、$exceptionHandler
を通じて $ provide.decorator 関数。これにより、カスタム実装の一部として使用する場合、元の実装への参照が提供されます。したがって、次のようなことができます。
mod.config(function($provide) {
$provide.decorator("$exceptionHandler", ['$delegate', function($delegate) {
return function(exception, cause) {
$delegate(exception, cause);
alert(exception.message);
};
}]);
});
元の例外ハンドラーが行うことと、カスタム機能を実行します。
こちらをご覧ください 更新されたフィドル 。
同じ名前のサービスを作成することにより、$exceptionHandler
機能をオーバーライドできます。
var mod = angular.module('testApp', []);
mod.factory('$exceptionHandler', function () {
return function (exception, cause) {
alert(exception.message);
};
});
サンプルについては、 this fiddle を参照してください。 $exceptionHandler
のファクトリー定義をコメント化すると、アラートではなくエラーがコンソールに記録されます。
$http
を使用して$injector
のような他のサービスを注入する例がある group thread は次のとおりです。
注:$exceptionHandler
(または別の組み込みサービス)の既存の機能を上書きしたくない場合は、 サービスを装飾する方法については、この回答 。