我想发布角度应用程序中发生的错误。
我按照这个related question给出的方法,如答案所示,我注入了$ injector,然后从那里获得了$ http服务。 但行
未捕获错误:循环依赖:$ http< - $ exceptionHandler< - $ rootScope
不断前来。
here is the fiddle with the problem
使用相关代码:
var mod = angular.module('test', []);
mod.config(function ($provide) {
$provide.decorator("$exceptionHandler", ['$delegate', '$injector', function ($delegate, $injector) {
var $http = $injector.get("$http");
}]);
});
mod.controller('testCtrl', function ($scope) {
});
如果您对该行发表评论
var $ http = $ injector.get(" $ http");
循环依赖性错误消失了。
我认为我在理解中遗漏了一些东西。我究竟做错了什么?毕竟,这似乎对其他人有用。
有关如何实现我向服务发布错误的初始目标的任何建议'也欢迎。
谢谢大家
答案 0 :(得分:4)
将您的注射器代码包装在函数
中var mod = angular.module('test', []);
mod.config(function ($provide) {
$provide.decorator("$exceptionHandler", ['$delegate', '$injector',function ($delegate, $injector) {
return function (exception, cause) {
var $http = $injector.get("$http");
}
}]);
});
mod.controller('testCtrl', function ($scope) {
});
答案 1 :(得分:3)
你可以这样做。
这会破坏您的循环依赖性错误,您也可以实现目标。
如果我没有错,那么你只想在异常处理程序中调用Web服务。
var httpCallOnAngularError = angular.module('exceptionTestApp', []);
/*httpCallOnAngularError.factory('$exceptionHandler', function () {
return function (exception, cause) {
alert(exception.message);
};
});*/
httpCallOnAngularError.config(function ($provide) {
$provide.decorator("$exceptionHandler", function ($delegate, $injector) {
return function (exception, cause) {
var $rootScope = $injector.get('$rootScope');
$delegate(exception, cause);
$rootScope.logAngularError();
alert(exception.message);
};
});
});
httpCallOnAngularError.run(function ($http, $rootScope) {
$rootScope.logAngularError = function () {
//Call your webservice here.
$http.get("http://jsonplaceholder.typicode.com/posts/1")
.success(function (response) {
console.log(JSON.stringify(response));
});
};
});
httpCallOnAngularError.controller('exceptionTestCtrl', function ($scope) {
throw {message: 'Log this error by calling webservice.'};
});
您可以通过此模板进行验证。
<div ng-app="exceptionTestApp" ng-controller="exceptionTestCtrl">
</div>
Webservice call in Exception Handler $http in $exceptionHandler