배럴 (https://angular.io/docs/ts/latest/glossary.html#!#barrel)에서 서비스를 가져올 때 종속성 주입 문제가 발생했습니다. 응용 프로그램의 핵심 배럴 거기에 다음의 모든 폴더에 대한 배럴, 이들은 각각의 폴더에 index.ts을함으로써 달성된다, 각 지침을 사용각도 2 - 종속성 주입 및 배킹
:
내가 직면 한 문제
이있다. 핵심 index.ts는 각 폴더의 모든 것을 참조하고 차례로 각 폴더는 특정 파일을 참조합니다.코어 index.ts
...
export * from './test/index';
테스트 index.ts
...
export * from './my-service.service';
코드
import { MyService } from '../../core';
...
@Injectable()
export class AuthGuard implements CanActivate {
isValidSession: boolean = false;
errorMessage: any;
constructor(
private myService: MyService
) { }
canActivate(
// Not using but worth knowing about
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) {
return this.myService.doSomething();
}
}
상기 결과 코드 다음과 같은 오류가 :
Uncaught Cannot resolve all parameters for 'AuthGuard'(undefined). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'AuthGuard' is decorated with Injectable.
코드를 보면 내가 @Injectable
주석 누락 된 모든 문제를 찾지 못했습니다. 실제로 동일한 서비스가 다른 구성 요소에서 사용되고 핵심 index.ts를 사용하여 가져 왔습니다.
article TypeScript가 JavaScript로 변환 될 때 메타 데이터가 생성되지 않기 때문에 생성자에 @Inject
이 사용되어야한다는 것을 알게되었습니다. 이것은 내 경우에 문제를 해결하지 못했습니다. 몇 가지 시도를 한 후에는 아래처럼 서비스를 가져 오기 위해 가져 오기를 변경하려고 시도했지만 오류가 발생하지 않았습니다.
성공적인 수입 :
import { MyService } from '../../core/test/my-service.service';
또는
import { MyService } from '../../core/test';
내가 거기에 문제가 내 응용 프로그램에서 index.ts 파일에 있어요 아니면 파일 구조 자체가 잘못된 것입니다 있는지 확실하지 않습니다 , 그러나 그들이 볼 수있는 것으로부터 그들은 잘 작동하고 있습니다. 이 특정
import
이 다른 이유를 알고 싶습니다.
가져 오기를 일반 가져 오기 문으로 변경하면 효과가 있습니까? – rinukkusu
예, 질문에 추가하겠습니다. 명확하지 않다는 것을 깨닫지 못했습니다! :) –
나는 배럴에있는 수출의 순서가 문제를 일으킬 수 있다고 언급 한 것 같아요. –