Tengo varios componentes personalizados que envuelven componentes PrimeNG por varias razones. Algunas instancias de mis componentes se utilizan en formularios reactivos, y el "requisito" del campo se establece mediante el validador Validators.required .
Los componentes de PrimeNG proporcionan un atributo required .
¿Cómo puedo inspeccionar el NgControl de mi componente para el validador requerido? Hay .disabled e .invalid , pero .invalid podría significar cualquier cosa.
Aquí tengo lo que estoy usando ahora, que funciona para los menús desplegables, pero sería incorrecto para cualquier otro tipo de entrada.
@Component({ selector: 'my-component', templateUrl: 'my.component.html' }) export class MyComponent implements OnInit, ControlValueAccessor { @Input() public disabled: boolean @Input() public required: boolean constructor( @Optional() @Self() public ngControl: NgControl ) { if (this.ngControl != null) { this.ngControl.valueAccessor = this; } } ngOnInit() { if (this.ngControl) { this.required = this.ngControl.invalid; this.disabled = this.ngControl.disabled; } } }Estoy seguro de que hay una mejor manera de hacer esto, pero no veo cómo.
Intente verificar si el control tiene un validador required o no como el siguiente:
ngOnInit() { if (this.ngControl) { this.required = this.hasRequiredValidator(this.ngControl.control); this.disabled = this.ngControl.disabled; } } hasRequiredValidator(control: AbstractControl): boolean { if (control.validator) { const validator = control.validator({} as AbstractControl); if (validator && validator.required) { return true; } } return false; }