1

RC5를 사용하여 간단한 Angular 2 재사용 가능한 구성 요소 (captcha 양식 필드)를 개발 중입니다. 이 모듈의 사용자가 @angular/forms을 사용하지 않는 경우 (구성 요소가 자급 자족하기 때문에) 서비스를 제공하지 않기를 바랍니다. 내가 바람직 NgModule에, 어떤 방법으로이 수출이 지금각도 2 : '@ angular/forms'에 조건부 종속성이있는 모듈

// Independent of '@angular/forms' 
@Component({ 
    selector: 'my-captcha', 
    template: `...`, 
}) 
export class CaptchaComponent {} 

// Depends on '@angular/forms' 
@Directive({ selector: 'my-captcha' }) 
export class CaptchaValueAccessorDirective {} 

:

의가에서 몇 가지 코드를 가져 보자

@NgModule({ 
    declarations: [ CaptchaComponent ], 
    exports: [ CaptchaComponent ], 
}) 
export class CaptchaModule {} 

@NgModule({ 
    declarations: [ CaptchaValueAccessorDirective ], 
    exports: [ CaptchaValueAccessorDirective ], 
    imports: [ FormsModule ], 
}) 
export class CaptchaFormsModule {} 

그것은 2 개 모듈의 1 - @angular/forms 의존성과 함께 그것없이 다른 하나.

그러나 대부분이 가정은 @angular/forms과 함께 사용되며, 다른 경우는 가장 중요한 것입니다.

나는 그것을 보장 할 수 방법 :

  1. 사용자가 아닌 CaptchaComponent가 사용 중일 때 (이 현재 달성) @angular/forms 의존 않는
  2. 사용자를로드하지 않아도 @angular/forms에 의존 단지 내가 결국
+0

사물의 구조에 따라 CaptchaFormsModule은 CaptchaModule의 부모 모듈이거나 두 모듈 모두 공통 상위의 하위 모듈이 될 수 있습니다. – estus

+0

'CaptchaFormsModule'과'CaptchaNoFormsModule'과 같은 두 모듈을 통해 원하는 것을 쉽게 얻을 수 있습니다. 각각 CaptchaComponent를 제공합니다. 따라서 사용자는 그 중 하나만 요구하면되고 나머지 하나는 나무 떨림으로 제거됩니다 – Dethariel

+0

'captcha-package/lib/captcha-no와 같은 공용 항목을 직접 가져올 수있는 좋은 점을 개인적으로 생각합니다. -forms'. 이 경우 나무 떨림에 의존 할 필요가 없습니다. – estus

답변

1

(현재 대신 모두 CaptchaModuleCaptchaFormsModule) NgModule 하나를 포함해야 이들 2 쓰임새 2 자립 모듈의 접근을 채택 :

// captcha-package/index.ts 
@NgModule({ 
    declarations: [ CaptchaComponent, CaptchaValueAccessorDirective ], 
    exports: [ CaptchaComponent, CaptchaValueAccessorDirective ], 
    imports: [ FormsModule ], 
}) export class CaptchaFormsModule {} 
... 
import { CaptchaFormsModule } from 'captcha-package'; 

// captcha-package/captcha-noforms.ts 
@NgModule({ 
    declarations: [ CaptchaComponent ], 
    exports: [ CaptchaComponent ], 
}) export class CaptchaNoFormsModule {} 
... 
import { CaptchaNoFormsModule } from 'captcha-package/captcha-noforms'; 

이 원하는 동작 결과 : 1) 각각의 사용자 타입은 을 가져 성분을 사용할 수 단일 패키지와 2) "no-forms"사용자는 @angular/forms 오버 헤드가 없습니다.