Ich möchte eine "my-form-group" -Komponente erstellen, die aus einem Label, einem beliebigen Eingabeelement (Eingabe, Kontrollkästchen, ...) und einem Div für Validierungsergebnisse besteht. Ich möchte die Inhaltsprojektion verwenden, um die Eingabe nach dem Label einzufügen. Etwas wie folgt aus:Zugriff auf ein beliebiges untergeordnetes Element in angular2
<form [ngFormModel]="myForm" (ngSubmit)="onSubmit()">
<my-form-group>
<input type="text"
class="form-control"
[ngFormControl]="myForm.controls['name']">
</my-form-group>
<form>
Die Komponente könnte wie folgt aussehen:
@Component({
selector: 'my-form-group',
template: `
<div class="form-group">
<label for="name">Name<span [ngIf]="name.required"> *</span></label>
<ng-content></ng-content>
<div [hidden]="name.valid || name.pristine" class="alert alert-danger">
Please check your input
</div>
</div>`
})
...
Ich möchte den Status des projizierten Komponente verwenden, um die „erforderlich“ Stern zu verstecken oder zu zeigen, und die Validierung div. Soweit ich weiß, kann eine projizierte Komponente unter Verwendung von @ContentChild()
und in ngAfterContentInit()
zugegriffen werden, aber ich denke, ich muss eine spezielle Komponente haben, um dies zu verwenden.
Wie kann ich am besten auf den Controller der projizierten Komponente zugreifen, wenn ich die genaue Komponente nicht kenne?
Was würden Sie '@ContentChildren abzufragen verwenden()' ? AFAIK nur eine Template-Variable oder ein Komponenten-/Anweisungstyp kann als "Selektor" verwendet werden. –
Sie müssten 'ElementRef' injizieren und dann' this.elementRef.nativeElement.querySelectorAll (...) 'verwenden, um CSS-Selektoren verwenden zu können. –
aber das würde 'ComponentRef' nicht geben? also keinen Nutzen mit 'ElementRef' –