Ich entwickle eine einfache Angular 2 wiederverwendbare Komponente - ein Captcha-Formularfeld, mit RC5. Ich möchte nicht, dass die Benutzer dieses Moduls @angular/forms
bedienen müssen, wenn sie es nicht verwenden (weil die Komponente autark ist).Angular 2: Modul mit bedingter Abhängigkeit von @ angular/forms
Lassen Sie uns einige Code bringen:
// Independent of '@angular/forms'
@Component({
selector: 'my-captcha',
template: `...`,
})
export class CaptchaComponent {}
// Depends on '@angular/forms'
@Directive({ selector: 'my-captcha' })
export class CaptchaValueAccessorDirective {}
Nun, ich habe dies in irgendeiner Weise zu exportieren, vorzugsweise in einer NgModule
:
@NgModule({
declarations: [ CaptchaComponent ],
exports: [ CaptchaComponent ],
})
export class CaptchaModule {}
@NgModule({
declarations: [ CaptchaValueAccessorDirective ],
exports: [ CaptchaValueAccessorDirective ],
imports: [ FormsModule ],
})
export class CaptchaFormsModule {}
Es ist 2 Module - 1 mit @angular/forms
Abhängigkeit, die anderes ohne es.
Aber meine Annahme ist, dass das meiste in Verbindung mit @angular/forms
verwendet wird, der andere Fall ist eher ein Rand-eins.
Wie kann ich sicherstellen, dass:
- Benutzer, die nicht abhängig von
@angular/forms
es nicht geladen werden muß, wennCaptchaComponent
verwendet wird (dies zur Zeit erreicht wird) - Benutzer, die auf
@angular/forms
abhängen haben nur auf einenNgModule
umfassen (anstelle von sowohlCaptchaModule
undCaptchaFormsModule
jetzt)
Abhängig davon, wie die Dinge strukturiert sind, kann CaptchaFormsModule ein übergeordnetes Modul für CaptchaModule sein oder beide Module können untergeordnete Module für gemeinsame übergeordnete Elemente sein. – estus
Sieht so aus, als ob das, was ich will, mit 2 Modulen ziemlich leicht erreicht werden kann: 'CaptchaFormsModule' und' CaptchaNoFormsModule', jedes von denen wird die 'CaptchaComponent' bereitstellen. Also müssen die Benutzer nur eine davon anfordern, und die andere wird durch Baumschütteln eliminiert. – Dethariel
Ich persönlich halte eine gute Sache für öffentliche Gegenstände für direkt verfügbar für den Import, wie 'captcha-package/lib/captcha-no "Formen". In diesem Fall muss man sich nicht auf das Baumschütteln verlassen. – estus