কৌণিক 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


আপনার প্লাঙ্কার কি ভেঙে গেছে?
জেস 18

4
এবং এখনও [ফর্মগ্রুপ] = "এলাকাসমূহ" সঠিক? কৌণিক সত্যই আমাকে প্যান্টে লাথি
মারছে

কোঁকড়ানো বন্ধনীগুলি ফর্মগ্রুপ নামটি নিয়ে আমার ক্ষেত্রে সমস্যা ছিল
লুইস

4
@ গ্রেগ দেরিতে মন্তব্য করতে ... [formGroup]="areasForm"সঠিক কারণ areasFormএটি আপনার উপাদান টিএসে একটি পরিবর্তনশীল, যদিও areasনেই। এটি areasForm:) এর সম্পত্তি
এজেটি 82

17

আমার ক্ষেত্রে আমি ফর্মের নামটি ডাবল এবং সিলেজ কোটে রেখে সমস্যার সমাধান করেছি যাতে এটি স্ট্রিং হিসাবে ব্যাখ্যা করা যায়:

[formControlName]="'familyName'"

নীচের মত:

formControlName="familyName"

8

আমার জন্য সমস্যাটি ছিল আমার

[formControlName]=""

পরিবর্তে

formControlName=""

4
আমাকে [formControl] থেকে formControlName এ পরিবর্তন করা দরকার
ড্যানিলো

7

পরিবর্তে

formGroupName="i"

আপনি অবশ্যই ব্যবহার করুন:

[formGroupName]="i"

টিপস :

যেহেতু আপনি নিয়ন্ত্রণগুলি লুপ করছেন, আপনি ইতিমধ্যে পরিবর্তনশীল area, তাই আপনি এটি প্রতিস্থাপন করতে পারেন:

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

দ্বারা:

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

ধন্যবাদ, এটি সমস্যার অংশ বলে মনে হয়েছিল তবে উপরের উত্তর আমার সমস্যাটি সমাধান করেছে।
Bazinga777

5

আমার জন্য, আমি যুক্ত করার চেষ্টা করছি [formGroupName]="i"এবং / অথবা formControlNameএবং পিতামাতাকে নির্দিষ্ট করতে ভুলে যাচ্ছিformArrayName । আপনার ফর্ম গ্রুপ ট্রি মনোযোগ দিন।


4
আমি পাশাপাশি উভয় ব্যবহার ছিল। মনে রাখবেন যে formArrayNameডিওএম-এলিমেন্টটি হায়ারার্কিতে উচ্চতর উপরে স্থাপন করা উচিত [formGroupName]="i"(যেমন লুপ উপাদানটির উপরে <div *ngFor=let ctrl of formArrayCtrl; let i = index"><div [formGroupName]="i"></div></div>)
জন

4
গ্রুপ ট্রি ফর্ম মনোযোগ দিন আমাকে সাহায্য।
সত্যম্বে জয়তে

3

এটি আমার জন্য ঘটছিল কারণ আমার কোথাও of fromArrayNameপরিবর্তে ছিল formArrayName😑


4
! @ # $ 🤦🤦🤦🤦🤦
ওয়াল

4
@ওয়াল আপনার কি একই সমস্যা ছিল?
জ্যাকব স্ট্যাম 14

4
হ্যাঁ, আমি আপনার উত্তরটি পড়ার পরেও এই টাইপটির জন্য যাচাই করেছিলাম তবে এটি প্রথমবারের মতো মিস হয়েছে
ওয়াল

4
পবিত্র গরু আমার "ফর্মআরারিনেম" ছিল এবং আপনি আমাকে এতটা সময় বাঁচিয়েছিলেন।
অ্যাশলে

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>

এখানে আমি স্বতন্ত্র ফর্ম নিয়ন্ত্রণ ব্যবহার করছিলাম, এবং আমি যে ত্রুটিটি সম্পর্কে কথা বলছিলাম তা পেয়ে যাচ্ছিলাম, যা আমার পক্ষে কোনও অর্থহীন হয়নি, যেহেতু আমি ফর্মগ্রুপ বা ফর্মারামের সাথে কাজ করছিলাম না ... এটি তখনই অদৃশ্য হয়ে গেল যখন আমি সিলেক্টে * এনজিআইফ যুক্ত করেছি এটি স্বয়ং, তাই এটি বিদ্যমান থাকার আগে ব্যবহার করা হচ্ছে না। এটাই আমার ক্ষেত্রে বিষয়টি সমাধান হয়েছে।

<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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.