0

저는 Ionic2를 처음 사용하며 알아낼 수없는 페이지의 순환 종속성으로 인한 오류를 발견했습니다.Ionic2 - Tabs 페이지 재사용 서비스로 인해 응용 프로그램이 중단되어 시작시 런타임 오류가 발생합니다.

Error: Can't resolve all parameters for HiredJobsPage: (?). 

문제를 정확하게 지적하기 위해 코드를 베어 본으로 옮겼습니다. 그것은 TabsPage와 관련이 있습니다.

Ionic2의 탭 템플릿 프로젝트 인 tabs.ts 파일을 사용하고 있습니다. 이 파일은 페이지 하단에 3 개의 탭이 표시되도록 지정하며 각 페이지는 다른 페이지에 링크됩니다.

로컬 변수에 TabsPage의 인스턴스를 할당하는 것 외에는 아무것도 수행하지 않는 매우 기본적인 서비스가 있습니다.

import {Injectable} from '@angular/core'; 
import {TabsPage} from "../../pages/tabs/tabs"; 

@Injectable() 
export class MyService { 

    foo: any = TabsPage; 

    constructor() { 

    } 
} 

이 서비스는 정상적으로 작동하며 MyService가 하나의 구성 요소에만 주입 될 때 프로젝트가 컴파일되고 실행됩니다. 그러나 서비스를 두 개의 구성 요소에 주입하면 프로젝트가 중단되어 실행되지 않습니다. foo 변수에 다른 페이지 (ProfilePage, JobRequests, null 등)를 할당하면 문제가 없습니다. 이 오류를 일으키는 것은 TabsPage뿐입니다. 왜 이럴 수 있니? 이면 MyService는 하나의 구성 요소에 주입 할 때 particular.Another 블로그 게시물에서 angular dependency injectionforward reference

답변

1

체크 아웃, here

이 서비스는 잘 작동하고, 프로젝트가 컴파일 및 실행됩니다. 그러나 서비스를 두 개의 구성 요소에 주입하면 프로젝트가 중단되어 실행되지 않습니다. foo 변수에 다른 페이지 (ProfilePage, JobRequests, null 등)를 할당하면 문제가 없습니다. 오류가 발생하는 것은 TabsPage뿐입니다.

당신의 탭 페이지 (T)이 클래스를 의미

: P, J 및 H. 서비스 (S) 당신이 당신의 서비스를 주입하기 위해 선택하는 클래스를 기반으로 T.

 T  S 
    /|\  | 
/| \  | 
    P J H  T 

를 참조하면 탭 페이지 (T)를 가리키는 것에 대한 순환 의존성으로 끝날 것입니다. 해결책은 서비스를 삽입 할 때 정방향 참조를 사용하는 것입니다.

constructor(@Inject(forwardRef(() => MyService)) myService) 
+0

굉장합니다. 자세한 답변을 해 주셔서 감사합니다. – EmacsVI

관련 문제