¿Cómo puedo verificar que el campo de entrada requerido no esté vacío? FormControl no puede leer el objeto...
public discountParamsForm = new FormGroup({ name: new FormControl('', Validators.required), type: new FormControl('', Validators.required), status: new FormControl('', Validators.required), value: new FormControl('', [Validators.required, Validators.pattern(/^([0-9]{1,2}){1}(\.[0-9]{1,2})?$/), Validators.min(1), Validators.max(100)]), dateInput: new FormControl('', Validators.required), categorySelect: new FormControl('', Validators.required) }); <input formControlName="dateInput" fullWidth type="text" [(ngModel)]="dateRange" nbInput placeholder="{{pickDateUI}}" [nbDatepicker]="datepicker"> <nb-rangepicker (rangeChange)="onDateChange($event)" format="yyyy-MM-dd" #datepicker></nb-rangepicker>nunca, nunca use en la misma etiqueta [(ngModel)] y formControlName
Bueno, usa un Validador personalizado .
discountParamsForm = new FormGroup({ ... dateInput: new FormControl('', this.validatorRange()), }) validatorRange(){ return (control:AbstractControl)=>{ if (!control.value.start) return {error:'start date is mandatory'} if (!control.value.end) return {error:'end date is mandatory'} } }Vea que el control siempre es un objeto con propiedades "inicio" y "fin" -por lo que siempre tiene valor, por lo que en el validador personalizado verificamos si esta propiedad tiene valor o no-
Un par de cosas aquí, estás mirando el objeto de formulario en sí. Puede ver en la imagen de la consola, el formulario completo es INVALID .
Si desea ver si hay un campo en un formulario, puede usar el método get.
en tu componente
this.discountParamsForm.get('name');esto devuelve un objeto FormControl y tiene valores como válido/no válido y muchos otros usan indicadores completos.
puede agregar un método getter en su componente para verificar esto en su html.
get name() { return this.discountParamsForm.get('name'); } <input [ngClass]="{'my-invalid-class': name.invalid}"dado que tenemos un método getter, no necesitamos verificar el formulario directamente y podemos acceder fácilmente al control dentro del formulario principal.