2017-02-23 6 views
0

나는 angular2를 배우고 때로는 종속성을 어디에 주입해야하는지 혼란 스럽다. 예를 들어 RouteParamsAngular 2 dependecy injection - 의존성 삽입 위치를 알아내는 방법

import {RouteParams} from 'angular2/router'; 

를 사용할 때처럼 우리는 단지 생성자 메서드에 전달하고 우리는 갈 수있다 : 우리는 같은 모듈에서 ROUTER_DIRECTIVES를 사용하는 경우,

constructor(private _photoService: PhotoService, private _routeParams: RouteParams){ 
    } 

을하지만 'angular2/router'

import {ROUTER_DIRECTIVES} from 'angular2/router'; 

지시어에 전달해야합니다. 배열의 배열 :

directives: [ROUTER_DIRECTIVES] 

내 궁금한 점은, 어떻게 전달해야하는지, 언제 지시어 나 공급자 배열에 의존성을 전달하는지 아니면 생성자 메서드에만 의존 할 수 있습니까?

+0

지시어 인 경우'declarations'입니다 ('directives'가 아닙니다!). 그들이 제공자 인 경우, 제공자입니다. 'providers '에 정의되지 않은 제공자를 생성자에 전달하면 오류가 발생합니다. 그것만큼이나 간단합니다. 정말로 사용되지 않는 예제 (알파 또는 베타)의 코드를 사용하고 있습니다. 나는 오래된 튜토리얼이 아닌 RTM에 제안 할 것이다. 지시문이나 제공자는 라우터 모듈에서 상당히 오랫동안 명시 적으로 가져올 필요가 없습니다. – estus

+0

'ROUTER_DIRECTIVES'는 꽤 오래된 것입니다. 어떤 각도 버전을 사용하고 있습니까? 그것은'RouterModule'이어야하고'@NgModule()'의'imports : [...]'로 가야합니다. –

답변

0

종속성은 기능에 따라 정의됩니다.

광기에 대한 방법이 있지만 확실히 시작하는 것은 압도적입니다. https://angular.io/docs/ts/latest/guide/architecture.html

기본적으로 지시문은 DOM을 조작하고, 종속성 주입은 모든 클래스 (종속성 모두 포함)를 주입합니다. 그래서 Angular에게 Angular에 알리는 구체적인 방법/장소가 있습니다.

해당 문서가 도움이 되었기를 바랍니다. 페이지의 중간 부분에서 지시문과 주입에 대해 논의하기 시작합니다.

0

제공자가 값을 만들고 보유하기 위해 DI에서 사용합니다.

제공자를 등록 할 때 @NgModule({providers: []}), @Component({providers: []}) 또는 @Directive({providers: []})은 의존하는 생성자에 전달할 값을 정의합니다.

게으른로드가 아닌 @NgModule()에 공급자를 등록하면 DI는 루트 범위에서 전체 응용 프로그램에 대한 단일 인스턴스를 제공합니다.

@Component() 또는 @Directive()에 제공자를 등록하면 DI가 구성 요소 또는 지시문 인스턴스 당 하나의 인스턴스를 제공합니다. MyComponent 서비스 A를 제공하고 페이지에 MyComponent 5 개 인스턴스가있는 경우

, 다음 A 5 인스턴스 (공급자 만이 처음 요청 인스턴스를 생성)까지있을 것입니다.

구성 요소, 지시문 또는 파이프에 생성자 매개 변수가있는 경우 DI는 매개 변수 유형 또는 @Inject() 데코레이터 (있는 경우)와 일치하는 공급자를 찾으려고 시도합니다. DI는 공급자에 대한 호스트 구성 요소를 살펴보고 보유하고있는 인스턴스를 생성자에 전달합니다. 호스트 구성 요소가 일치하는 제공자를 제공하지 않으면 DI는 상위 구성 요소를 찾을 때까지 계속 찾습니다. 루트 구성 요소 (AppComponent)에 도달했으나 공급자를 찾지 못한 경우 루트 범위 (@NgModule() 공급자)를 확인합니다.

게으른로드 모듈은 거기에 등록 된 공급자를 루트 범위에 추가 할 수 없기 때문에 조금 특별합니다.범위 (인젝터)가 만들어지면 새 공급자를 등록 할 수 없습니다.

지연로드 모듈은 응용 프로그램 루트 범위에 대한 하위 범위를 만듭니다. 등록 된 공급자는 지연로드 모듈 (및 지연로드 모듈로로드 된 가져온 모듈)의 일부인 구성 요소, 지시문, 파이프 및 서비스에만 표시됩니다.

관련 문제