ngModel পিতামাতার ফর্মগ্রুপের নির্দেশের সাথে ফর্ম নিয়ন্ত্রণগুলি নিবন্ধকরণ করতে ব্যবহার করা যাবে না


93

আরসি 5 এ আপগ্রেড করার পরে আমরা এই ত্রুটি পেতে শুরু করি:

ngModel cannot be used to register form controls with a parent formGroup 
 directive.
Try using formGroup's partner directive "formControlName" instead.  Example:

    <div [formGroup]="myGroup">
      <input formControlName="firstName">
    </div>

    In your class:

    this.myGroup = new FormGroup({
       firstName: new FormControl()
    });

      Or, if you'd like to avoid registering this form control,
 indicate that it's standalone in ngModelOptions:

      Example:

      
  <div [formGroup]="myGroup">
     <input formControlName="firstName">
     <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">
  </div>

দেখে মনে হচ্ছে আরসি 5 এ দু'জনকে আর একসাথে ব্যবহার করা যাবে না, তবে আমি কোনও বিকল্প সমাধান খুঁজে পাইনি।

ব্যতিক্রম উত্পাদনের উপাদানটি এখানে:

    <select class="field form-control" [formGroup]="form" [(ngModel)]="cause.id" [name]="name">
    <option *ngFor="let c of causes" [value]="c.text">{{c.text}}</option>
    </select>

আপনি কি আমদানি করেছিলেন FormsModuleএবং ReactiveFormsModule?
গন্টার জ্যাচবাউয়ার 14

অবশ্যই, দু'জনেই
ব্যবহারকারী 2363245

আফাইক, একমাত্র বিদ্যমান ব্যাখ্যাটি হ'ল
ব্লগ.আঙ্গুলার-

পরিবর্তনের উত্স পাওয়া গেছে: github.com/angular/angular/pull/10314
ব্যবহারকারী 2363245

উত্তর:


178

উত্তরটি ত্রুটি বার্তায় ঠিক রয়েছে, আপনাকে অবশ্যই এটি সূচিত করতে হবে যে এটি স্বতন্ত্র এবং সুতরাং এটি ফর্ম নিয়ন্ত্রণগুলির সাথে বিরোধ নয়:

[ngModelOptions]="{standalone: true}"

4
একক মানে কি?
জাস

4
এর অর্থ এটি ফর্ম মডেল / ডেটা দ্বারা পরিচালিত নয় যাতে আপনি যে কোনও অবজেক্ট / মডেলটি যেভাবে চান সেটি AngularJS 1 এ ব্যবহার করতে পারবেন
আভেনির

আমি কেবল আমার পরীক্ষার সেটআপে এই সমস্যাটি দেখি। আসলে কি অনুপস্থিত? [ngModelOptions] = "{স্বতন্ত্র: সত্য}" পরীক্ষা স্থির করে তবে যুক্তি পরিবর্তন করে। ngModel পিতা বা মাতা উপাদান থেকে উত্তরাধিকার সূত্রে প্রাপ্ত, যা আমার ক্ষেত্রে এনজিফর্ম ঘোষণা করে
অহলব্রিচ

4
Support for using the ngModel input property and ngModelChange event with reactive form directives has been deprecated in Angular v6 and will be removed in Angular v7. https://next.angular.io/api/forms/FormControlName#use-with-ngmodel
ওয়াসিএফ

28

@ আভানির Çোকাজের উত্তরটি প্রসারিত করা হচ্ছে

একজন নবজাতক এমনকি আমি ত্রুটি বার্তাটি প্রথমে পরিষ্কারভাবে বুঝতে পারি নি।

ত্রুটির বার্তাটি কীটি ইঙ্গিত করে তা হ'ল আপনার ফর্মগ্রুপে আপনার এমন একটি উপাদান রয়েছে যা আপনার ফর্মকন্ট্রোলের জন্য গণ্য হয় না। (উদ্দেশ্যমূলকভাবে / দুর্ঘটনাক্রমে)

যদি আপনি এই ক্ষেত্রটি বৈধতা না দেওয়ার ইচ্ছা করেন তবে এখনও এই ইনপুট উপাদানটিতে এনজিমডেলটি ব্যবহার করতে চান দয়া করে উপরে @ অ্যাভেনির দ্বারা উল্লিখিত বৈধতার প্রয়োজন ছাড়াই এটি একটি স্বতন্ত্র উপাদান চিহ্নিত করতে পতাকা যুক্ত করুন।


6
আপনি যদি বৈধতার জন্য যদি ব্যবহার করতে চান এবং এটি একই সময়ে এনজি মডেলের সাথে ব্যবহার করতে চান তবে কী হবে?
পল

আমার ক্ষেত্রে আমি ফর্মগ্রুপের অভ্যন্তরের কোনও উপাদানের জন্য ফর্মকন্ট্রোল ঘোষণা করতে মিস করলাম!
সাগর খাতরী

14

ঠিক আছে, অবশেষে এটি কার্যকর হয়েছে: https://github.com/angular/angular/pull/10314#issuecomment-242218563 দেখুন

সংক্ষেপে, আপনি আর এ এর nameমধ্যে আর অ্যাট্রিবিউট ব্যবহার করতে পারবেন না formGroupএবং এর formControlNameপরিবর্তে অবশ্যই ব্যবহার করতে হবে


8

আপনি যখন ফর্মকন্ট্রোলনাম লিখেন তখন কৌনিক 2 গ্রহণ করবেন না। আপনাকে formControlName লিখতে হবে । এটি বড় হাতের দ্বিতীয় শব্দ সম্পর্কে।

<input type="number" [(ngModel)]="myObject.name" formcontrolname="nameFormControl"/>

ত্রুটিটি এখনও যদি অজানা সমস্ত (মাইবজেক্ট) ক্ষেত্রের জন্য ফর্ম নিয়ন্ত্রণ সেট করার চেষ্টা করে।

<form> </form>উদাহরণস্বরূপ শুরুতে :<form [formGroup]="myForm" (ngSubmit)="submitForm(myForm.value)"> set form control for all input field </form>.


5

import { FormControl, FormGroup, AbstractControl, FormBuilder, Validators } from '@angular/forms';


    this.userInfoForm = new FormGroup({
      userInfoUserName: new FormControl({ value: '' }, Validators.compose([Validators.required])),
      userInfoName: new FormControl({ value: '' }, Validators.compose([Validators.required])),
      userInfoSurName: new FormControl({ value: '' }, Validators.compose([Validators.required]))
    });
<form [formGroup]="userInfoForm" class="form-horizontal">
            <div class="form-group">
                <label class="control-label"><i>*</i> User Name</label>
                    <input type="text" formControlName="userInfoUserName" class="form-control" [(ngModel)]="userInfo.userName">
            </div>
            <div class="form-group">
                <label class="control-label"><i>*</i> Name</label>
                    <input type="text" formControlName="userInfoName" class="form-control" [(ngModel)]="userInfo.name">
            </div>
            <div class="form-group">
                <label class="control-label"><i>*</i> Surname</label>
                    <input type="text" formControlName="userInfoSurName" class="form-control" [(ngModel)]="userInfo.surName">
            </div>
</form>


1

যদি উপাদানটির 1 টির বেশি ফর্ম থাকে তবে সমস্ত নিয়ন্ত্রণ এবং ফর্মগুলি নিবন্ধ করুন

আমাকে অন্য একটি উপাদানে নয় কেন একটি নির্দিষ্ট উপাদানে এটি ঘটছে তা জানতে হবে।

সমস্যাটি ছিল আমার একটি উপাদানটিতে আমার 2 টি ফর্ম ছিল এবং দ্বিতীয় ফর্মটি এখনও [formGroup]ছিল না এবং এখনও নিবন্ধভুক্ত হয়নি যেহেতু আমি এখনও ফর্মগুলি তৈরি করছিলাম।

আমি এগিয়ে গিয়েছিলাম এবং উভয় ফর্ম সম্পূর্ণ লিখন সম্পূর্ণ করেছিলাম যাতে কোনও ইনপুট নিবন্ধিত না করেই সমস্যাটি সমাধান হয়।


1

আমি এই ত্রুটিটি পেয়েছি কারণ আমি divকোনও formGroupবৈশিষ্ট্যের সাথে আমার সমস্ত ফর্ম নিয়ন্ত্রণগুলি আবদ্ধ করি নি ।

উদাহরণস্বরূপ, এটি একটি ত্রুটি নিক্ষেপ করবে

<div [formGroup]='formGroup'>
</div>
<input formControlName='userName' />

এটি মিস করা বেশ সহজ হতে পারে যদি এটির একটি দীর্ঘতর ফর্ম।


0

আপনি ব্যবহার করতে চান তাহলে [formGroup]সঙ্গে formControlName, আপনি প্রতিস্থাপন করতে হবে nameসঙ্গে অ্যাট্রিবিউট formControlNameformControlName

উদাহরণ:

এটি কাজ করে না কারণ এটি [formGroup]এবং nameগুণাবলী ব্যবহার করে ।

<div [formGroup]="myGroup">
   <input name="firstName" [(ngModel)]="firstName">
</div>

আপনার nameদ্বারা বৈশিষ্ট্যটি প্রতিস্থাপন করা উচিত formControlNameএবং এটি নীচের মত ভাল কাজ করবে:

<div [formGroup]="myGroup">
   <input formControlName="firstName" [(ngModel)]="firstName">
</div>

আপনি যদি [formGroup] = "মাইগ্রুপ" এবং অভ্যন্তরীণভাবে [(এনজিএমডেল)] ফর্মগ্রুপের মধ্যে থাকা কোনও সম্পত্তি সহ রেফারেন্স ব্যবহার করেন তবে এর সমাধানও হতে পারে। [ngModelOptions] যোগ করার চেষ্টা করুন = "{স্বতন্ত্র: সত্য}" যাতে আপনি আপনার
সংকলককে বলেন

0

দেখে মনে হচ্ছে আপনি formControlName হিসাবে একই ফর্ম ক্ষেত্রে ngModel ব্যবহার করছেন। এনজিওমোডেল ইনপুট সম্পত্তি ব্যবহারের জন্য সমর্থন এবং প্রতিক্রিয়াশীল ফর্ম নির্দেশাবলীর সাথে এনজিমোডেল চেঞ্জ ইভেন্টটি কৌণিক v6 এ অবমূল্যায়ন করা হয়েছে এবং কৌণিক v7 এ সরানো হবে


0

আপনার ফর্ম গ্রুপ ট্যাগগুলিতে কোনও ফর্মকন্ট্রনলাম সম্পত্তি নেই এমন কিছু ফর্ম নিয়ন্ত্রণ (যেমন ইনপুট, নির্বাচন, ইত্যাদি) থাকলে এই ত্রুটিটি উদ্ভূত হয়।

এই উদাহরণগুলি ত্রুটি নিক্ষেপ করে:

<form [formGroup]="myform">
    <input type="text">
    <input type="text" [ngmodel]="nameProperty">
    <input type="text" [formGroup]="myform" [name]="name">
</fom>

দুটি উপায় আছে, একা দাঁড়ানো:

<form [formGroup]="myform">
    <input type="text" [ngModelOptions]="{standalone: true}">
    <input type="text" [ngmodel]="nameProperty" [ngModelOptions]="{standalone: true}">
    <!-- input type="text" [formGroup]="myform" [name]="name" --> <!-- no works with standalone --
</form>

অথবা এটি ফর্মগ্রুপে অন্তর্ভুক্ত করুন

<form [formGroup]="myform">
    <input type="text" formControlName="field1">
    <input type="text" formControlName="nameProperty">
    <input type="text" formControlName="name">
</fom>

শেষটি সূচনাগ্রন্থ গোষ্ঠীতে এগুলি সংজ্ঞায়িত করতে বোঝায়

this.myForm =  new FormGroup({
    field1: new FormControl(''),
    nameProperty: new FormControl(''),
    name: new FormControl('')
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.