Angular forms not recognizing formControlName

Discussão em 'Angular' iniciado por Diego Rios, Novembro 24, 2024.

  1. Diego Rios

    Diego Rios Guest

    I'm building a form which on the top contains filters. I'll show the functions that are called when the error ocurrs

    public onChangeSubType(requestSubType: any) {
    const typeId = this.filterFormGroup.get('requestType').value.value;
    const subTypeId = this.filterFormGroup.get('requestSubType').value.value;
    const accountId = this.filterFormGroup.get('account').value;

    if (!subTypeId) return;

    this.detailList = [];
    this.setRequestModel(requestSubType.type);

    this.fieldSettings = Utils.manageFields(typeId, subTypeId);
    this.buildInvoiceForm();

    if (subTypeId === 77) {
    this.invoiceFormGroup.patchValue({ terminatedEmployees: true });
    this.fetchTerminatedEmployees(accountId);
    } else {
    this.invoiceFormGroup.patchValue({ terminatedEmployees: false });
    this.fetchEmployees(accountId);
    }

    }


    private buildInvoiceForm() {
    if (this.invoiceFormGroup) this.invoiceFormGroup.reset();
    const requestType = this.filterFormGroup.get('requestType').value.name;
    const requestSubType =
    this.filterFormGroup.get('requestSubType').value.name;
    const mainAccount = this.filterFormGroup.get('mainAccount').value.name;
    const account = this.filterFormGroup.get('account').value.name;
    const defaultSubject = `${requestType} - ${requestSubType} - ${mainAccount} - ${account}`;
    this.extraData = {
    employees: this.employees,
    categories: this.requestCategories,
    };
    if (this.fieldSettings) {
    this.invoiceFormGroup = new FormGroup({
    category: new FormControl('', [Validators.required]),
    subject: new FormControl(defaultSubject, [
    Validators.required,
    Validators.maxLength(200),
    ]),
    selectAll: new FormControl(false),
    employee: new FormControl(null, [Validators.required]),
    description: new FormControl('', [
    Validators.required,
    Validators.maxLength(200),
    ]),
    activityDate: new FormControl(''),
    attachmentFiles: new FormControl(''),
    terminatedEmployees: new FormControl(false),
    });
    }


    invoice.html template

    <div class="invoice-request__field flex-basis-30">
    <span class="lssai-label font-weight-bold"
    >{{
    this.invoiceFormGroup.get('terminatedEmployees')?.value
    ? 'Terminated'
    : ''
    }}
    Employees*</span
    >
    <ng-multiselect-dropdown
    formControlName="employee"
    [placeholder]="'Select Employee'"
    [settings]="accountMultiSelectSettings"
    [data]="employees"
    >
    </ng-multiselect-dropdown>
    </div>


    onChangeSubType is called whenever the subType changes and I get the following error


    ERROR Error: There is no FormControl instance attached to form control element with name: 'employee'
    ​

    filterValueChanges() is called onInit()

    private filterValueChanges() {
    this.filterFormGroup.valueChanges.subscribe((form) => {
    if (form.requestType === null) {
    this.requestSubTypes = null;
    }
    if (form.requestSubType) {
    this.onChangeSubType(form.requestSubType);
    }
    this.checkForCategoryNotApplyValues();
    });
    }


    Just a final comment. If I change formControlName="employee" for [formControl]="invoiceFormGroup.controls['employee']" it works but gives me a tslint error.

    How can I solve the error so I can keep formControlName="employee".

    Continue reading...

Compartilhe esta Página