Cómo solucionar el error ExpressionChangedAfterItHasBeenCheckedError: Valor anterior para ‘ng-valid’: ‘true’. Valor actual: ‘false’.
¿Alguien puede ayudarme a solucionar este problema? Ocurre cuando el formulario se vuelve válido, pero luego vuelvo atrás e inicio este componente (agrego un nuevo valor en el FormArray (desde cero elementos)). ¿Cómo puedo averiguar qué propiedad está activando ng-valid? ¿Es el array? ¿Elemento individual en el array? ¿O el formgroup completo?
He intentado ngAfterContentChecked() { this.cdr.detectChanges(); }
y changeDetection: ChangeDetectionStrategy.OnPush
, y llamar a this.cdr.detectChanges()
después de una llamada push. Aún así, no funciona. Es extraño porque solo ocurre la primera vez que el formulario es válido, y luego agrego un elemento.
@Component({
selector: 'app-list-other-conditions',
templateUrl: './list-other-conditions.component.html',
styleUrls: ['../survey-pmhx.component.scss']
})
export class ListOtherConditionsComponent implements OnInit, OnDestroy {
@Input()
formGroup!: FormGroup
@Input()
arrayName!: string
get formArray():FormArray {
return this.formGroup!.get(this.arrayName)! as FormArray
}
addItem() {
this.formArray.push(this.initItem())
}
removeItem(i:number) {
this.formArray.removeAt(i)
if (this.formArray.length === 0)
this.formArray.push(this.initItem())
}
public initItem = () : FormGroup =>
this.fb.group({
diagnosis: this.fb.control(null, Validators.required),
year: this.fb.control(null, [Validators.required, CustomValidators.pastYear])
})
constructor(private fb: FormBuilder, private readonly cdr: ChangeDetectorRef) { }
ngOnInit(): void {
if (this.formArray.length === 0)
this.addItem();
}
}
}
“`
davy.ai
Es difícil determinar qué propiedad está activando ng-valid sin ver el formulario completo y cualquier código relevante. Sin embargo, algunas soluciones potenciales para intentar incluyen:
Puede ser necesario realizar experimentación y pruebas para determinar la causa raíz del error.