कोणीय 2 प्रपत्र पर अप्रभावित नाम विशेषता के साथ नियंत्रण नहीं पा सकता है


92

मैं अपने घटक में एक फॉर्मअरे से अधिक पुनरावृति करने की कोशिश कर रहा हूं लेकिन मुझे निम्नलिखित त्रुटि मिलती है

Error: Cannot find control with unspecified name attribute

यहाँ मेरी कक्षा फ़ाइल पर तर्क कैसा दिखता है

export class AreasFormComponent implements OnInit {
    public initialState: any;
    public areasForm: FormGroup;

    constructor(private fb: FormBuilder) { }

    private area(): any {
      return this.fb.group({
          name: ['', [Validators.required]],
          latLong: ['', [Validators.required]],
          details: ['', [Validators.required]]
      });
    }

    public ngOnInit(): void {
        this.areasForm = this.fb.group({
            name: ['', [Validators.required]],
            areas: this.fb.array([this.area()])
        });
    }
}

और मेरी टेम्पलेट फ़ाइल

<form class="areas-form" [formGroup]="areasForm" (ngSubmit)="onSubmit(areasForm.values)">
    <md-input-container class="full-width">
        <input mdInput placeholder="Location Name" type="text" formControlName="name" required>
        <md-error *ngIf="areasForm.get('name').hasError('required')">Please enter the locationName</md-error>
    </md-input-container>
    <md-grid-list cols="1" [formArrayName]="areas">
        <md-grid-tile formGroupName="i"  colspan="1" rowHeight="62px" *ngFor="let area of areasForm.controls.areas.controls; let i = index ">
            <md-grid-list cols="3" rowHeight="60px">
                <md-grid-tile colspan="1">
                    <md-input-container class="full-width">
                        <input mdInput placeholder="Area Name" type="text" formControlName="name" required>
                        <md-error *ngIf="areasForm.get('areas').controls[i].name.hasError('required')">Please enter the area name</md-error>
                    </md-input-container>
                </md-grid-tile>
                <md-grid-tile colspan="1">
                    <md-input-container class="full-width">
                        <input mdInput placeholder="details" type="text" formControlName="details" required>
                        <md-error *ngIf="areasForm.get('areas').controls[i].name.hasError('required')">Please enter the locationName</md-error>
                    </md-input-container>
                </md-grid-tile>
                <md-grid-tile colspan="1">
                    <button md-fab (click)="remove(i)"><md-icon>subtract</md-icon>Remove Area</button>
                </md-grid-tile>
            </md-grid-list>
        </md-grid-tile>
    </md-grid-list>
    <button type="submit" [disabled]="areasForm.invalid" md-raised-button color="primary">Submit</button>
</form>

जवाबों:


148

कोष्ठक से निकालें

[formArrayName]="areas" 

और केवल उपयोग करें

formArrayName="areas"

यह, क्योंकि [ ]आप एक चर को बांधने की कोशिश कर रहे हैं , जो यह नहीं है। अपने जमा की सूचना भी दें, यह होना चाहिए:

(ngSubmit)="onSubmit(areasForm.value)"

के बजाय areasForm.values


क्या आपकी तन्द्रा टूटी है?
जेस

2
और फिर भी [फॉर्मग्रुप] = "क्षेत्रफर्म" सही है? कोणीय वास्तव में मुझे पैंट में लात मार रहा है ....
greg

घुंघराले कोष्ठक मेरे मामले में समस्या के रूप में थेसमूह नाम
लुइस कॉन्ट्रेरास

2
@ टिप्पणी करने के लिए देर से ... [formGroup]="areasForm"सही है क्योंकि areasFormआपके घटक टीएस में एक चर है, जबकि areasनहीं है। यह areasForm
AJT82

17

मेरे मामले में मैंने दोहरे और पापी उद्धरणों में फ़ॉर्मकंट्रोल का नाम डालकर इस मुद्दे को हल किया ताकि इसे एक स्ट्रिंग के रूप में व्याख्या किया जाए:

[formControlName]="'familyName'"

नीचे के समान:

formControlName="familyName"

8

मेरे लिए समस्या यह थी कि मेरे पास था

[formControlName]=""

के बजाय

formControlName=""

1
मुझे [formControl] से formControlName
danilo

7

के बजाय

formGroupName="i"

तुम्हें अवश्य उपयोग करना चाहिए:

[formGroupName]="i"

टिप्स :

चूंकि आप नियंत्रणों पर नियंत्रण कर रहे हैं, आप पहले से ही चर रहे हैं area, इसलिए आप इसे बदल सकते हैं:

*ngIf="areasForm.get('areas').controls[i].name.hasError('required')"

द्वारा:

*ngIf="area.hasError('required', 'name')"

धन्यवाद, यह समस्या का हिस्सा लग रहा था लेकिन ऊपर दिए गए जवाब ने मेरे मुद्दे को हल कर दिया।

4

मेरे लिए, मैं जोड़ने के लिए कोशिश कर रहा था [formGroupName]="i"और / या formControlNameऔर माता-पिता को निर्दिष्ट करने की भूलformArrayName । अपने फॉर्म ग्रुप ट्री पर ध्यान दें।


1
मैं दोनों का उपयोग कर रहा था। डाल करने के लिए याद रखें formArrayNameकी तुलना में पदानुक्रम में ऊपर एक डोम तत्व पर [formGroupName]="i"(जैसे पाश तत्व पर: <div *ngFor=let ctrl of formArrayCtrl; let i = index"><div [formGroupName]="i"></div></div>)
जॉन

1
समूह वृक्ष बनाने पर ध्यान दें जिससे मुझे मदद मिली।
सत्यमेव जयते

3

यह मेरे लिए हो रहा था क्योंकि मैं कहीं happening के fromArrayNameबजाय थाformArrayName


1
! @ # $ 🤦🤦🤦🤦🤦
वाल

1
@ क्या आपके पास एक ही मुद्दा है?
जैकब स्टैम

1
हाँ, मैं भी अपने जवाब को पढ़ने के बाद इस टाइपो के लिए जाँच की है, लेकिन यह पहली बार में छूट
वाल

1
पवित्र गाय मेरे पास "फ़ॉर्मअर्नामनाम" थी और आपने मुझे इतना समय दिया।
एशले

0

यह मेरे साथ हुआ क्योंकि मैंने एक फॉर्मकंट्रोलनाम खाली छोड़ दिया ( formControlName="")। चूंकि मुझे उस अतिरिक्त फॉर्म नियंत्रण की आवश्यकता नहीं थी, इसलिए मैंने इसे हटा दिया और त्रुटि हल हो गई।


0

तो, मेरे पास यह कोड था:

<div class="dropdown-select-wrapper" *ngIf="contentData">
    <button mat-stroked-button [disableRipple]="true" class="mat-button" (click)="openSelect()" [ngClass]="{'only-icon': !contentData?.buttonText?.length}">
      <i *ngIf="contentData.iconClassInfo" class="dropdown-icon {{contentData.iconClassInfo.name}}"></i>
      <span class="button-text" *ngIf="contentData.buttonText">{{contentData.buttonText}}</span>
    </button>
    <mat-select class="small-dropdown-select" [formControl]="theFormControl" #buttonSelect (selectionChange)="onSelect(buttonSelect.selected)" (click)="$event.stopPropagation();">
      <mat-option *ngFor="let option of options" [ngClass]="{'selected-option': buttonSelect.selected?.value === option[contentData.optionsStructure.valName]}" [disabled]="buttonSelect.selected?.value === option[contentData.optionsStructure.valName] && contentData.optionSelectedWillDisable" [value]="option[contentData.optionsStructure.valName]">
        {{option[contentData.optionsStructure.keyName]}}
      </mat-option>
    </mat-select>
  </div>

यहाँ मैं स्टैंडअलोन फॉर्मकंट्रोल का उपयोग कर रहा था, और मुझे वह त्रुटि मिल रही थी जिसके बारे में हम बात कर रहे हैं, जिससे मुझे कोई मतलब नहीं था, क्योंकि मैं फॉर्मग्रुप या फॉर्मरेज़ के साथ काम नहीं कर रहा था ... यह केवल गायब हो गया जब मैंने चयन में * ngIf जोड़ा यह स्वयं है, इसलिए इसका उपयोग वास्तव में मौजूद होने से पहले नहीं किया जा रहा है। यही मेरे मामले में समस्या हल हो गई है।

<mat-select class="small-dropdown-select" [formControl]="theFormControl" #buttonSelect (selectionChange)="onSelect(buttonSelect.selected)" (click)="$event.stopPropagation();" *ngIf="theFormControl">
          <mat-option *ngFor="let option of options" [ngClass]="{'selected-option': buttonSelect.selected?.value === option[contentData.optionsStructure.valName]}" [disabled]="buttonSelect.selected?.value === option[contentData.optionsStructure.valName] && contentData.optionSelectedWillDisable" [value]="option[contentData.optionsStructure.valName]">
            {{option[contentData.optionsStructure.keyName]}}
          </mat-option>
        </mat-select>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.