strictdi 上的 $exceptionHandler 装饰器 - 循环错误和 strictdi 错误
$exceptionHandler decorator on strictdi - circular and strictdi errors
我在将 $exceptionHandler 格式化为 strictdi 时遇到问题。我试图修改异常处理程序以便将 angular 错误记录到我们的服务器并让我们知道某些页面崩溃。对于下面的代码,我遇到了循环依赖错误。在下一组代码中,出现了 strictdi 错误。请注意,我们使用 gulp.
缩小我们的代码
此处出现错误:发现循环依赖项:$rootScope <- $http <- serverlog <- $exceptionHandler <- $rootScope
var pageApp = angular.module('pageApp',['angular-oauth2','ngCookies']);
pageApp.factory("serverlog", serverlog);
serverlog.$inject = ["$http"];
function serverlog($http) {
var svc = {};
svc.add = function(exception) {
var data = angular.toJson(exception);
console.log("Sending to server errors");
// console.log(data);
// $.ajax({
// type: "POST",
// url: "/api/v1/jslog",
// contentType: "application/json",
// data: data
// });
};
return svc;
}
pageApp.config(['$provide', function($provide) {
$provide.decorator("$exceptionHandler", $exceptionHandler);
$exceptionHandler.$inject = ['$delegate','serverlog'];
function $exceptionHandler($delegate,serverlog) {
return function(exception, cause) {
$delegate(exception, cause);
serverlog.add(exception);
}
};
}]);
然后对于这组代码,出现了 strictdi 错误:
serverlog 未使用显式注解,无法在严格模式下调用
pageApp.config(['$provide', function($provide) {
$provide.decorator("$exceptionHandler", ['$delegate','serverlog', function($delegate,serverlog) {
return function(exception, cause) {
$delegate(exception, cause);
serverlog.add(exception);
}
}]);
}]);
要解决循环依赖,您可以注入 $injector
而不是 serverlog
并在运行时解决依赖:
pageApp.config(['$provide', function($provide) {
$provide.decorator("$exceptionHandler", $exceptionHandler);
$exceptionHandler.$inject = ['$delegate', '$injector'];
function $exceptionHandler($delegate, $injector) {
var serverlog;
return function(exception, cause) {
serverlog = serverlog || $injector.get('serverlog');
$delegate(exception, cause);
serverlog.add(exception);
};
}
}]);
尝试了第二个示例,但无法重现 strictdi 错误。只要您对 serverlog 服务使用相同的代码,就会出现与第一个示例相同的错误。
我在将 $exceptionHandler 格式化为 strictdi 时遇到问题。我试图修改异常处理程序以便将 angular 错误记录到我们的服务器并让我们知道某些页面崩溃。对于下面的代码,我遇到了循环依赖错误。在下一组代码中,出现了 strictdi 错误。请注意,我们使用 gulp.
缩小我们的代码此处出现错误:发现循环依赖项:$rootScope <- $http <- serverlog <- $exceptionHandler <- $rootScope
var pageApp = angular.module('pageApp',['angular-oauth2','ngCookies']);
pageApp.factory("serverlog", serverlog);
serverlog.$inject = ["$http"];
function serverlog($http) {
var svc = {};
svc.add = function(exception) {
var data = angular.toJson(exception);
console.log("Sending to server errors");
// console.log(data);
// $.ajax({
// type: "POST",
// url: "/api/v1/jslog",
// contentType: "application/json",
// data: data
// });
};
return svc;
}
pageApp.config(['$provide', function($provide) {
$provide.decorator("$exceptionHandler", $exceptionHandler);
$exceptionHandler.$inject = ['$delegate','serverlog'];
function $exceptionHandler($delegate,serverlog) {
return function(exception, cause) {
$delegate(exception, cause);
serverlog.add(exception);
}
};
}]);
然后对于这组代码,出现了 strictdi 错误: serverlog 未使用显式注解,无法在严格模式下调用
pageApp.config(['$provide', function($provide) {
$provide.decorator("$exceptionHandler", ['$delegate','serverlog', function($delegate,serverlog) {
return function(exception, cause) {
$delegate(exception, cause);
serverlog.add(exception);
}
}]);
}]);
要解决循环依赖,您可以注入 $injector
而不是 serverlog
并在运行时解决依赖:
pageApp.config(['$provide', function($provide) {
$provide.decorator("$exceptionHandler", $exceptionHandler);
$exceptionHandler.$inject = ['$delegate', '$injector'];
function $exceptionHandler($delegate, $injector) {
var serverlog;
return function(exception, cause) {
serverlog = serverlog || $injector.get('serverlog');
$delegate(exception, cause);
serverlog.add(exception);
};
}
}]);
尝试了第二个示例,但无法重现 strictdi 错误。只要您对 serverlog 服务使用相同的代码,就会出现与第一个示例相同的错误。