0

왜 이런 서비스를 삽입 할 수 없습니까? 지금이 처리하는 방법 Angular js - 서비스 및 순환 주입 오류

콘솔

에서 "Circular injection error" 얻을

service('actionService',function (sessionService) { 
this.doAction = function() { 
    return 5; 
} 
}); 
service('sessionService',function (userService) { 
this.get = function { 
    if(userService.check()){ 
    //do other stuffs 
    } 
    } 

}); 
service('userService',function (actionService) { 
    this.check = function() { 
    actionService.doAction(); 
    if(x = 9){ 
    return true; 
    }else{ 
    return false; 
    } 
    } 
}); 

? 여기

더 나은 코드 : 당신이 actionService의 인스턴스가 전에 http://pastebin.com/wS32UNCq

답변

2

, 당신은 sessionService의 인스턴스를 주입해야합니다.

sessionService의 인스턴스를 만들려면 먼저 userService의 인스턴스를 삽입해야합니다.

userService의 인스턴스를 가질 수 있으려면 먼저 actionService의 인스턴스를 삽입해야합니다.

Angular는 생성자 삽입을 사용하기 때문에 모든 종속성이 충족 될 때까지 서비스를 인스턴스화 할 수 없습니다. 하지만 종속성은 원으로 둘러져 있으며 그 중 어느 것도 인스턴스화 될 수 없습니다.

이 문제를 해결하려면 종속성없이 인스턴스화 할 수있는 추가 서비스에 공유 종속성을 추출해야합니다.

+0

안녕하세요, 감사합니다.하지만 ** 공유 의존성 **에 대한 마지막 부분에 대해 설명해주십시오. ** 당신이 나에게 설명하는 것을 얻을 수있는 몇 가지 예를 들어 주셔서 감사합니다! – sbaaaang

+0

물론, 나는 상관하지 않습니다. 액션 서비스가 세션 서비스에 의존하는 이유를 먼저 설명해 주시겠습니까? 내 앞에서 진짜 코드가 없으면 풀기가 약간 까다 롭습니다. – JSager

+0

나중에 실제 코드를 붙여 넣으려고 시도합니다. sessionService는 userService에서 사용자 프로필을 가져 와서 사용자 세션을 설정 한 다음 사용자 세션이 존재하고 logged users가 아닌 사용자를 리디렉션하는 경우 actionService가 check (by sessionService)합니다 .... (두 단어로) ; P – sbaaaang