Angular 2:条件依赖于“@angular/forms”的模块
Angular 2: module with conditional dependency on `@angular/forms`
我正在开发一个简单的 Angular 2 可重用组件 - 验证码表单字段,使用 RC5。我不希望这个模块的用户在不使用它时必须服务 @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
:
@NgModule({
declarations: [ CaptchaComponent ],
exports: [ CaptchaComponent ],
})
export class CaptchaModule {}
@NgModule({
declarations: [ CaptchaValueAccessorDirective ],
exports: [ CaptchaValueAccessorDirective ],
imports: [ FormsModule ],
})
export class CaptchaFormsModule {}
它有 2 个模块 - 1 个具有 @angular/forms
依赖性,另一个没有。
但我的假设是,大多数情况下这将与 @angular/forms
结合使用,另一种情况更像是一个优势。
我如何确保:
- 不依赖
@angular/forms
的用户在使用CaptchaComponent
时不用加载(目前已经实现)
- 确实依赖
@angular/forms
的用户必须只包含一个 NgModule
(而不是 CaptchaModule
和 CaptchaFormsModule
现在)
我最终为这 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
开销。
我正在开发一个简单的 Angular 2 可重用组件 - 验证码表单字段,使用 RC5。我不希望这个模块的用户在不使用它时必须服务 @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
:
@NgModule({
declarations: [ CaptchaComponent ],
exports: [ CaptchaComponent ],
})
export class CaptchaModule {}
@NgModule({
declarations: [ CaptchaValueAccessorDirective ],
exports: [ CaptchaValueAccessorDirective ],
imports: [ FormsModule ],
})
export class CaptchaFormsModule {}
它有 2 个模块 - 1 个具有 @angular/forms
依赖性,另一个没有。
但我的假设是,大多数情况下这将与 @angular/forms
结合使用,另一种情况更像是一个优势。
我如何确保:
- 不依赖
@angular/forms
的用户在使用CaptchaComponent
时不用加载(目前已经实现) - 确实依赖
@angular/forms
的用户必须只包含一个NgModule
(而不是CaptchaModule
和CaptchaFormsModule
现在)
我最终为这 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
开销。