Получить все ошибки проверки из Angular 2+ FormArray

public static getFormErrors(formGroup: FormGroup, server_errors = {}): any {
    let errors = {};

    Object.keys(formGroup.controls).forEach(key => {
        const controlErrors: ValidationErrors = formGroup.get(key).errors;

        if (controlErrors != null) {
            Object.keys(controlErrors).forEach(keyError => {
                errors[key] = SharedModule.readableError(key, keyError, controlErrors[keyError]);
            });
        }
    });

    if (server_errors) {
        Object.keys(server_errors).forEach(key => {
            errors[key] = SharedModule.readableError(key, server_errors[key][0], '');
        });
    }

    return errors;
}

Как я могу получить все ошибки проверки (включая FormArray и FormGroup) из this.form?

P.S. Текущий код выше выводит

{name: "Name is required", email: "Email is required"}

и я хочу, чтобы вложенный вывод был

{name: "Name is required", email: "Email is required", "myFormGroup": [{"myControl1": "myControl1 is required"}]}

person Mohammad Sharaf Ali    schedule 26.02.2018    source источник


Ответы (1)


Может быть, немного поздно или вы уже узнали об этом, но я наткнулся на то же самое. Что я сделал, так это перебрал массив и нашел, действительно ли он. Если это неверно, получите переменную и поместите ее в ошибку.

Вот мое решение:

for (let i = 0; i < this.form.controls['array']['controls'].length; i++){
    if (!this.form.controls['array']['controls'][i]['valid']) {
       let field = this.form.controls['array']['controls'][i]['controls']['fieldname']['value']; // fieldname is the value of your control
       errors[field] = `${field} is required`;
    }   
}
person Swoox    schedule 14.03.2018
comment
Спасибо за ответ. Мне удалось сделать это так: gist.github.com/surferxo3/dfde629413561d988fb89efb700d6ddf - person Mohammad Sharaf Ali; 15.03.2018