2017-01-26 11 views
0

내 $ exceptionHandler를 strictdi로 포맷하는 데 문제가 있습니다. 서버에 각도 오류를 기록하고 특정 페이지가 손상되었다는 것을 알려주기 위해 예외 처리기를 수정하려고합니다. 아래 코드에서는 순환 종속성 오류가 발생합니다. 다음 코드 집합에서 strictdi 오류가 발생합니다. 우리는 코드를 꿀꺽 꿀꺽 마심으로 축소합니다.

여기 오류 : 순환 종속성이 발견 : $가 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 errors : serverlog가 명시 적 주석을 사용하고 있지 않으며 엄격 모드에서 호출 할 수 없습니다.

답변

0

이 대신 serverlog$injector를 주입 할 수있는 순환 종속성을 해결하고 대신 런타임에 의존성을 해결하려면 :

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 서비스에 대해 동일한 코드를 사용하는 한 첫 번째 예제와 같은 오류가 발생해야합니다.

+0

감사합니다. 그것은 트릭을했다. 나는 어리석게도 $ injector를 사용하여 $ delegate를 주입하려고 시도했지만 서버 로그에서만 사용할 수 있다는 것을 몰랐습니다. – John

+0

@ 존 당신은 환영합니다 :) – tasseKATT