очистить проверку, основанную на условной группе вложенных форм - PullRequest
0 голосов
/ 29 мая 2019

Я использую динамическую генерацию форм, в которой мне нужно поддерживать проверку на основе некоторого условия в группе вложенных форм, я могу добавить требуемый валидатор, если условие соответствует, после этого, если условие изменилось, мне нужно удалить требуемый валидатор из этого поля

Я использовал функцию one для установки проверки поля, которая рекурсивно проверяет элемент управления и добавляет проверку

        const condition = field.condition;
        const operator = condition.operator ? condition.operator : '=';
        let show;
        const page = this.formConfiguration.pages.find(findpage => findpage.pageId === condition.question.page);
        const section = page.sections.find(findsection => findsection.sectionId === condition.question.section);
        const question = section.questions.find(findQuestion => findQuestion.id === condition.question.question);
        show = this.comparators[operator](form.value[question.name], condition.value);
        if (field.childValidation) {
            if (show && field.validations.length === 0 && !field.renderChild) {
                field.validations.push({ name: 'required', message: 'Required' });
                field.renderChild = true;
                this.updateValidations(this.form, field.name, field.childValidation);
            } else {
                if (field.renderChild && field.validations.length !== 0) {
                    field.validations = [];
                    field.renderChild = false;
                }
            }
        }
        return show;
    }

    updateValidations(formGroup: FormGroup, formControlName, childValidation) {
        if (childValidation) {
            Object.keys(formGroup.controls).forEach(field => {
                console.log(formControlName === field, 'TIMES');
                if (formControlName === field) {
                    const control = formGroup.get(field);
                    control.setValidators([Validators.required]);
                }
                // Recurrsion over inner formgroup of formgroup
                if ('controls' in formGroup.controls[field]) {
                    this.updateValidations((formGroup.controls[field] as FormGroup), formControlName, childValidation);
                }
            });
        }
    }```

here the field json which generate the form control 

``` {
                name: 'Question2',
                label: 'Upto which standard :  *',
                type: 'input',
                inputType: 'text',
                validations: [
                ],
                icon: 'text_fields',
                tooltip: 'Text Input',
                id: 421,
                condition: {
                  question: {
                    page: 878,
                    section: 428,
                    question: 950
                  },
                  value: 'If enrolled then write up to which std. studied'
                }
              }
            ],
          }```

in the above code, the application is slowing down. the code is not optimized . in above, a field which is JSON object from which control is being generated. there are one property validators for that field which is an array. I need to update that validation property of that field based on the condition. if the condition is true then push the array. After that, if any changes accrue then again check on that field for the condition if the condition fails then pop the validation.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...