ত্রুটি ত্রুটি: স্যুইচে অনির্ধারিত নামের বৈশিষ্ট্য সহ ফর্ম নিয়ন্ত্রণের জন্য কোনও মান অ্যাক্সেসর


96

এখানে কৌণিক 4 এ আমার উপাদান রয়েছে:

@Component( {
    selector: 'input-extra-field',
    template: `
            <div class="form-group" [formGroup]="formGroup" >
                <switch [attr.title]="field.etiquette" 
                    [attr.value]="field.valeur" [(ngModel)]="field.valeur"
                    [formControl]="fieldControl" [attr.id]="name" [attr.disabled]="disabled">
                </switch>
                <error-messages [control]="name"></error-messages>
            </div>
    `
} )

এখানে আমার ক্লাস:

export class SwitchExtraField extends ExtraField {
    @Input() field: ExtraFormField;
    @Input() entity: { fields: Object };
    @Input() formGroup: FormGroup;

    constructor( formDir: NgForm ) {
        super( null, null, formDir );
    }

    get disabled(): string {
        if ( this.field && !!this.field.saisissable && !this.field.saisissable )     {
            return 'disabled';
        }
        return null;
    }
}

সংকলনের সময় আমি এই ত্রুটিটি পেয়েছি:

ERROR Error: No value accessor for form control with unspecified name attribute
    at _throwError (forms.es5.js:1918)
    at setUpControl (forms.es5.js:1828)
    at FormControlDirective.webpackJsonp.../../../forms/@angular/forms.es5.js.FormControlDirective.ngOnChanges (forms.es5.js:4617)

আমি যখন উপাদানটি ইনপুটটিতে পরিবর্তন করি তখন এটি কাজ করে, আমি জেনেছি যে আমি একই কাঠামোটি অন্য উপাদানগুলিতে ব্যবহার করছি এবং এটি সূক্ষ্মভাবে কাজ করে।



এই সম্ভবত আপনাকে সহায়তা করতে পারে stackoverflow.com/questions/46708080/...
Dinistro

উত্তর:


136

আমি এই ত্রুটিটি সংশোধন করেছি name="fieldName" ngDefaultControlএমন উপাদানটিতে বৈশিষ্ট্য যুক্ত করে যা [(ngModel)]বৈশিষ্ট্য বহন করে ।


33
কিছু অতিরিক্ত ব্যাখ্যা এটি একটি ভাল উত্তর করতে হবে। ngDefaultControlউদাহরণস্বরূপ আপনি কোথায় ডকুমেন্টেশন পেয়েছেন ?
ইশারউড

9
আমি মনে করি name="fieldname"প্রয়োজনীয় নয়, তবে ngDefaultControlসমস্যাটি নিরাময় করে।
মিশায়েক

4
আরও ব্যাখ্যা এখানে। stackoverflow.com/questions/46465891/...
আমি nidhin করছি

"এনজিডিএফএল্টকন্ট্রোল" যুক্ত করা (* এনজিফোর্ড ডাইরেক্টিভের সাথে অ্যাট্রিবিউটে) আমার অনুরূপ সমস্যার সমাধান করেছে।
ডেভিডসন লিমা

85

আমার একই সমস্যা ছিল এবং সমস্যাটি ছিল আমার সন্তানের উপাদানটির একটি @inputনাম ছিল formControl

সুতরাং আমাকে কেবল এ থেকে পরিবর্তন করা দরকার:

<my-component [formControl]="formControl"><my-component/>

প্রতি:

<my-component [control]="control"><my-component/>

ts:

@Input()
control:FormControl;

14
বিশাল জীবন রক্ষাকারী! ধন্যবাদ, এটিকে সন্ধান করা খুব কঠিন।
এইচ ডগ

4
একই সঠিক সমস্যার মুখোমুখি হয়েছিল
আহমদ বকতাশ হায়েরি

4
একই সমস্যা ছিল! গুগল করা এবং আপনার উত্তর পাওয়ার আগে 1 ঘন্টা প্রায় নষ্ট ধন্যবাদ
wmehanna

4
বাহ, এই সমাধানটি আসতে বেশ দীর্ঘ সময় লেগেছিল - এটিকে এত পরিষ্কারভাবে প্রকাশ করার জন্য ধন্যবাদ
কাব 5

অ্যাঙ্গুলার 10 এর সাথে কাজ করে, যেমনটি পূর্ববর্তী মন্তব্যে বলা হয়েছে, এটির সত্যতা খুঁজে পাওয়া সত্যিই শক্ত, তবে পরে, এটি বোঝা যায় যে একটি সম্ভাব্য নাম স্থানের দ্বন্দ্বের কারণে "ফর্মকন্ট্রোল" একটি উপাদান হিসাবে ইনপুট সম্পত্তি হিসাবে ব্যবহার করা উচিত নয় , অন্য নামকরণ সমাধানটি ক্ষেত্রটির নাম পরিবর্তন করতে পারে_ফর্মকন্ট্রোল যা ফর্মকন্ট্রোল উদাহরণ দ্বারা খাওয়ানো হয়।
থমাস

41

আমি কৌণিক 7. এ একটি কাস্টম ফর্ম নিয়ন্ত্রণ উপাদান লিখতে গিয়ে এই ত্রুটিটি পেয়েছি However তবে, উত্তরগুলির কোনওটিই কৌণিক to এর ক্ষেত্রে প্রযোজ্য নয়।

আমার ক্ষেত্রে, নিম্নলিখিতটি ডেকরেটারে যুক্ত করা দরকার @Component:

  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => MyCustomComponent),  // replace name as appropriate
      multi: true
    }
  ]

এটি "এটি কেন কাজ করে তা আমি জানি না তবে এটি কাজ করে" এর একটি ঘটনা is এটি কৌণিক দিক থেকে খারাপ নকশা / প্রয়োগের দিকে চালিত করুন।


6
এই স্নিপেটটি কৌণিক নির্ভরতা ইনজেকশন স্তরকে বলে যে অন্যান্য শ্রেণিগুলি (যেমন ফর্মকন্ট্রোলনাম নির্দেশিকা) টোকেন এনজি_ভিএলইউআইসিসিএসআর জন্য জিজ্ঞাসা করলে আপনার ক্লাসটি ফিরিয়ে দেওয়া উচিত। এটি ব্যতীত, কৌণিকের জানার কোনও উপায় থাকবে না যে আপনার শ্রেণিটি একটি কাস্টম ফর্ম নিয়ন্ত্রণ (ইন্টারফেস ইত্যাদির সমস্ত তথ্য প্রতিস্থাপনের সময় ছড়িয়ে পড়েছে)
ম্যাক্স ম্যামফোর্ড

18

আমারও একই ত্রুটি ছিল, কৌণিক 7

 <button (click)="Addcity(city.name)" [(ngModel)]="city.name"  class="dropdown-item fontstyle"
     *ngFor="let city of Cities; let i = index">
      {{city.name}}
 </button>

আমি সবেমাত্র এনজিডিফল্টকন্ট্রোল যুক্ত করেছি

   <button (click)="Addcity(city.name)" [(ngModel)]="city.name"  ngDefaultControl class="dropdown-item fontstyle"
 *ngFor="let city of Cities; let i = index">
  {{city.name}}


আমার জীবন বাঁচানোর জন্য ধন্যবাদ!
বরুণ কুমার

7

আমার এই একই ত্রুটি ছিল - আমি ঘটনাক্রমে উপাদানটির mat-form-fieldপরিবর্তে [(এনজি মডেল)] কে আমার সাথে আবদ্ধ করি input


একই সমস্যা ছিল
দামিথ

6

আমি জেসমিনের সাথে আমার ইউনিট পরীক্ষায় এই ত্রুটি বার্তাটি পেয়েছিলাম। আমি কাস্টম উপাদানটিতে এনজিডিফল্টকন্ট্রোল বৈশিষ্ট্য যুক্ত করেছি (আমার ক্ষেত্রে এটি একটি কৌণিক উপাদান স্লাইড টগল ছিল) এবং এটি ত্রুটির সমাধান করে।

<mat-slide-toggle formControlName="extraCheese">
  Extra Cheese
</mat-slide-toggle>

উপরে উপাদান পরিবর্তন অন্তর্ভুক্ত করা ngDefaultControl atttribute

<mat-slide-toggle ngDefaultControl formControlName="extraCheese">
 Extra Cheese
</mat-slide-toggle>

5

আমার ক্ষেত্রে, আমি ইনপুট না করে লেবেলে [(ngModel)] প্রবেশ করিয়েছি। একটি সতর্কতাও রয়েছে, আমি নির্দিষ্ট লাইনে উপরের ত্রুটিটি সঠিকভাবে চালানোর চেষ্টা করেছি তবে ত্রুটিটি যায় নি। যদি অন্য কোনও জায়গাগুলি থেকে থাকে যেখানে আপনি একই ভুল করেছেন, তবে এটি আপনাকে একই লাইনে একই ত্রুটি ছুড়ে ফেলে


4
এটি একটি ভাল উত্তর। কিছু উপাদান (নির্বাচন করুন, রেডিও ইত্যাদি) আপনি পিছলে যেতে পারেন এবং এনজিওমোডেলটিকে ভুল জায়গায় স্থির রাখতে পারেন। ত্রুটি বার্তাটি খুব বেশি সাহায্য করে না।
অ্যান্ড্রুবেনজামিন

5

আমদানিগুলিতে ম্যাটস্লেক্টমডুল যুক্ত করে কারমা ইউনিট পরীক্ষার কেসগুলি চালানোর সময় আমি এই ত্রুটির মুখোমুখি হয়েছি issue

imports: [
        HttpClientTestingModule,
        FormsModule,
        MatTableModule,
        MatSelectModule,
        NoopAnimationsModule
      ],

কেবলমাত্র যদি আপনার "কৌণিক উপাদান" ইনস্টল থাকে তবে অন্যথায় আপনার এটির প্রয়োজন হবে না।
মাইকফক্স 2 কে

3

এটি একধরণের বোকা, তবে দুর্ঘটনাক্রমে [formControl]পরিবর্তে ব্যবহার করে আমি এই ত্রুটি বার্তাটি পেয়েছি [formGroup]। এখানে দেখো:

ভুল

@Component({
  selector: 'app-application-purpose',
  template: `
    <div [formControl]="formGroup"> <!-- '[formControl]' IS THE WRONG ATTRIBUTE -->
      <input formControlName="formGroupProperty" />
    </div>
  `
})
export class MyComponent implements OnInit {
  formGroup: FormGroup

  constructor(
    private formBuilder: FormBuilder
  ) { }

  ngOnInit() {
    this.formGroup = this.formBuilder.group({
      formGroupProperty: ''
    })
  }
}

ডান

@Component({
  selector: 'app-application-purpose',
  template: `
    <div [formGroup]="formGroup"> <!-- '[formGroup]' IS THE RIGHT ATTRIBUTE -->
      <input formControlName="formGroupProperty" />
    </div>
  `
})
export class MyComponent implements OnInit {
  formGroup: FormGroup

  constructor(
    private formBuilder: FormBuilder
  ) { }

  ngOnInit() {
    this.formGroup = this.formBuilder.group({
      formGroupProperty: ''
    })
  }
}

এটা আমার জন্যও ছিল !! এত সূক্ষ্ম কারণ ডক্স আমাকে যে কোডটি দিয়ে কাজ করছে তা দিয়েছিল।
সংফোফা

2

আমার ক্ষেত্রে আমি নির্দেশনা ব্যবহার করেছি, তবে এটি আমার মডিউল.টি ফাইলগুলিতে আমদানি করিনি। আমদানি এটি স্থির করে।


ধন্যবাদ, তবে ng serveআমদানি রিফ্রেশ করার জন্য আমার আবারও পুনঃসূচনা করা দরকার ছিল
FindOutIslamNow

2

আমার এই একই ত্রুটিটি ছিল, controlআমার কাস্টম ফর্ম উপাদানটিতে আমার একটি ইনপুট ক্ষেত্র ছিল তবে দুর্ঘটনাক্রমে নামটির ইনপুটটিতে নিয়ন্ত্রণ পাস করছিলাম formControl। আশা করি কেউই এই সমস্যার মুখোমুখি নয়।


2

আমার ক্ষেত্রে এটা আমার মধ্যে দ্বি জন্য নতুন উপাদান নিবন্ধিত থাকার যেমন হাবা হিসেবে app.module.tsঘোষণা কিন্তু না রপ্তানির হবে।


1

আমার ক্ষেত্রে এটি আমার ভাগ করা মডিউলে ঘটছে এবং আমাকে নিম্নলিখিতগুলি @ এনজিউমুলেলে যুক্ত করতে হয়েছিল:

...
  imports: [
    CommonModule,
    FormsModule,
    ReactiveFormsModule,
    IonicModule
  ],
...

এটি কাজ করতে অনেক ঘন্টা ব্যয় করেছে। আশা করি এটি এ জাতীয় ত্রুটির সাথে লড়াই করা কিছু অন্যকে সহায়তা করবে।


0

আমার একই ত্রুটি ছিল, তবে আমার ক্ষেত্রে দৃশ্যত এটি একটি সিঙ্ক্রোনাইজেশন সমস্যা ছিল, এইচটিএমএল উপাদানগুলি সরবরাহ করার মুহুর্তে।

আমি এই পৃষ্ঠায় প্রস্তাবিত কয়েকটি সমাধান অনুসরণ করেছি তবে তাদের মধ্যে যে কোনও আমার পক্ষে কাজ করেছে, কমপক্ষে সম্পূর্ণ নয়।

আসলে আমার ত্রুটিটি যা সমাধান করেছিল তা হল উপাদানগুলির পিতা এইচটিএমএল ট্যাগের মধ্যে নীচের কোড স্নিপেট লিখতে।

আমি ভেরিয়েবলের সাথে আবদ্ধ ছিলাম।

কোড:

    *ngIf="variable-name"

ত্রুটিটি ঘটেছে, দৃশ্যত প্রকল্পটি পৃষ্ঠাটি রেন্ডার করার চেষ্টা করে স্পষ্টতই ভেরিয়েবলটি মূল্যায়ন করার মুহুর্তে, প্রকল্পটির কোনও মূল্য খুঁজে পায়নি। উপরের কোড স্নিপেটের সাথে আপনি নিশ্চিত হয়ে নিন যে পৃষ্ঠাটি রেন্ডার করার আগে আপনি জিজ্ঞাসা করছেন যে চলকটি আরম্ভ করা হচ্ছে কিনা।

এটি আমার উপাদান.এস কোড:

import { Component, OnInit } from '@angular/core';
import { InvitationService } from 'src/app/service/invitation.service';
import { BusinessService } from 'src/app/service/business.service';
import { Invitation } from 'src/app/_models/invitation';
import { forEach } from '@angular/router/src/utils/collection';

@Component({
  selector: 'app-invitation-details',
  templateUrl: './invitation-details.component.html',
  styleUrls: ['./invitation-details.component.scss']
})
export class InvitationDetailsComponent implements OnInit {
  invitationsList: any;
  currentInvitation: any;
  business: any;
  invitationId: number;
  invitation: Invitation;

  constructor(private InvitationService: InvitationService, private BusinessService: 
BusinessService) { 
this.invitationId = 1; //prueba temporal con invitacion 1
this.getInvitations();
this.getInvitationById(this.invitationId);
  }

   ngOnInit() {

  }

  getInvitations() {
    this.InvitationService.getAllInvitation().subscribe(result => {
      this.invitationsList = result;
      console.log(result);
    }, error => {
      console.log(JSON.stringify(error));
    });
  }

  getInvitationById(invitationId:number){
    this.InvitationService.getInvitationById(invitationId).subscribe(result => {
      this.currentInvitation = result;
      console.log(result);
      //this.business=this.currentInvitation['business'];
       //console.log(this.currentInvitation['business']); 
     }, error => {
     console.log(JSON.stringify(error));
    });
  }
      ...

এখানে আমার এইচটিএমএল মার্কআপ:

<div class="container-fluid mt--7">
  <div class="row">
    <div class="container col-xl-10 col-lg-8">
      <div class="card card-stats ">
        <div class="card-body container-fluid form-check-inline" 
         *ngIf="currentInvitation">
          <div class="col-4">
             ...

আমি আশা করি এটি সহায়ক হতে পারে।


এই লিঙ্কে একটি অনুরূপ সমস্যা :, করেছে stackoverflow.com/q/49409674/8992452 সম্ভবত এটি সমস্যা সাহায্য করতে পারেন
Nuke

0

আপনি আপনার চলন্ত চেষ্টা করেছেন [(ngModel)]করতে divপরিবর্তে switchআপনার HTML কি? আমার কোডে আমারও একই ত্রুটি উপস্থিত হয়েছিল এবং এটি ছিল কারণ আমি মডেলটির <mat-option>পরিবর্তে একটি এ আবদ্ধ করি <mat-select>। যদিও আমি ফর্ম নিয়ন্ত্রণ ব্যবহার করছি না।


0

আমার ক্ষেত্রে এটি একটি উপাদান ছিল me স্মৃতি যা বিদ্যমান ছিল না যেমন

[formControl]="personId"

শ্রেণি ঘোষণায় এটি যুক্ত করা এটি স্থির করে

this.personId = new FormControl(...)


0

# ব্যাকগ্রাউন্ড

  • নেটিভস্ক্রিপ্ট .0.০

আমার ক্ষেত্রে, ত্রুটিটি ত্রুটি দ্বারা উপাদান ট্যাগ পরিবর্তন করে ট্রিগার করা হয়েছিল। <টেক্সটভিউ an [(ngModel)] = "নাম" এর ভিতরে। সংজ্ঞায়িত ছিল।

[(NgModel) সরানোর পরে] = "নাম" ত্রুটি চলে গেছে।


-1

আমার ক্ষেত্রে, <TEXTAREA>কৌণিক রূপান্তর করার সময় আমার কাছে পুরানো এইচটিএমএল থেকে একটি ট্যাগ ছিল । পরিবর্তন করতে হয়েছিল <textarea>


আমি ডাউনভিট করি নি, তবে এর কারণটি কখনও হওয়া উচিত নয়।
এখনইউটস্লাইম সন্ধান করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.