Ich brauche Hilfe. Ich versuche, eine benutzerdefinierte Komponente zu erstellen, die einen Dropdown-Wert umschließt und die Standardoption --Select-- je nachdem, ob sie erforderlich ist, ein- oder ausblendet. (Und ich möchte andere benutzerdefinierte Logik später auf diese Komponente anwenden)Zugriff auf den Validator in einer benutzerdefinierten Komponente erforderlich
Wie bekomme ich den Validator.required in meinem benutzerdefinierten Steuerelement, das über die reaktive Form des Elternelements festgelegt ist ??
Ich bin neu in Angular aber nicht AngularJS
Parent page html:
<div formGroupName="siteType">
<my-dropdownlist
id="siteType"
formControlName="code"
[items]="arrayOfItems">
</my-dropdownlist>
</div>
Parent page .ts:
export class MyPage {
serviceForm: FormGroup = this.fb.group({
siteType: this.fb.group({
code: [serviceData.siteType, Validators.required]
})
});
Custom Control html:
<select class="form-control" id="itemType">
<option *ngIf="!selectedValue && required">--Select--</option>
<option *ngFor="let item of items" [value]="item">
{{ item }}
</option>
</select>
Custom Control ts:
import { Component, Input, Output, EventEmitter, forwardRef, OnInit} from '@angular/core';
import { NG_VALIDATORS, FormControl, Validator, NgForm, FormBuilder } from '@angular/forms';
@Component({
selector: 'my-dropdownlist',
templateUrl: './dropdownlist.component.html',
providers: [
{
provide: NG_VALIDATORS,
useExisting: forwardRef(() => DropdownListComponent),
multi: true
}
]
})
export class MyDropdownListComponent implements Validator, OnInit {
@Input() items: any[];
@Input() required: boolean = false;
@Input() formControlName: string;
private selectedValue: any;
ngOnInit() {
//Some way to get at the Validator.required set on the parent form here so I can tell whether to apply it to my dropdown?
}
public validate(c: FormControl) {
return null; //TODO for additional future validation
}
}
Demo: http://pnnr.co/edit/AokYjOv0ZWD2XFVTWjEf?p=preview – Alex