FormControlName এবং formControl এর মধ্যে পার্থক্য কী?


99

আমি ReactiveFormsModuleএকটি ফর্ম ধারণ করে এমন উপাদান তৈরি করতে Angular2 ব্যবহার করছি । আমার কোডটি এখানে:

foo.component.ts :

constructor(fb: FormBuilder) {
    this.myForm = fb.group({
        'fullname': ['', Validators.required],
        'gender': []
    });
}

foo.component.html (সহ [formControl]):

<div class="fields">
    <div class="field">
        <label>Fullname*</label>
        <input type="text" [formControl]="myForm.controls.fullname"/>
    </div>
</div>

<div class="inline fields">
    <label for="gender">Gender</label>
    <div class="field">
        <div class="ui radio checkbox">
            <input type="radio" name="gender" checked="" tabindex="0" class="hidden" [formControl]="myForm.controls.gender">
            <label>Male</label>
        </div>
    </div>
    <div class="field">
        <div class="ui radio checkbox">
            <input type="radio" name="gender" tabindex="0" class="hidden" [formControl]="myForm.controls.gender">
            <label>Female</label>
        </div>
    </div>
</div>

foo.component.html (সহ formControlName):

<div class="fields">
    <div class="field">
        <label>Fullname*</label>
        <input type="text" formControlName="fullname"/>
    </div>
</div>

<div class="inline fields">
    <label for="gender">Gender</label>
    <div class="field">
        <div class="ui radio checkbox">
            <input type="radio" name="gender" checked="" tabindex="0" class="hidden" formControlName="gender">
            <label>Male</label>
        </div>
    </div>
    <div class="field">
        <div class="ui radio checkbox">
            <input type="radio" name="gender" tabindex="0" class="hidden" formControlName="gender">
            <label>Female</label>
        </div>
    </div>
</div>

উভয় উপায় কাজ করে। তবে আমি বুঝতে পারছি না যে ব্যবহার [formControl]এবং এর মধ্যে পার্থক্য কী formControlName


4
আমি বলব যে ফর্মকন্ট্রোলের উপরে formControlName ব্যবহারের মূল কারণটি যখন আপনি উপাদানটিতে পৃথক ফর্মকন্ট্রোল উদাহরণগুলি বজায় রাখতে চান না।
পল সামসোথা

উত্তর:


179

আমি বিশ্বাস করি আপনি একটি গুরুত্বপূর্ণ বিষয়টি মিস করেছেন: [formGroup]দ্বিতীয় উদাহরণে নির্দেশনা। আপনার ফর্মটি একাধিক ডট নেভিগেশনগুলি সংরক্ষণ করতে formControlNameএকত্রে ব্যবহৃত হয় [formGroup]। উদাহরণ স্বরূপ:

<div>
  <input type="text" [formControl]="myForm.controls.firstName"/>
  <input type="text" [formControl]="myForm.controls.lastName"/>
  <input type="text" [formControl]="myForm.controls.email"/>
  <input type="text" [formControl]="myForm.controls.title"/>
</div>

এর সমতুল্য:

<div [formGroup]="myForm">
  <input type="text" formControlName="firstName"/>
  <input type="text" formControlName="lastName"/>
  <input type="text" formControlName="email"/>
  <input type="text" formControlName="title"/>
</div>

এখন নেস্টেড কল্পনা FormGroups:)


[formControl] ব্যবহার করে = "form.get ('নিবন্ধকরণ.অ্যাট্রিবিউটস.আউটআউটমে')" সমস্যার কারণ হয়ে দাঁড়িয়েছে .. তবে formControlName = "firstNRegifications.Attributes.aboutmeame"
রিকার্ডো সারাকিনো

[formControl]form.validফর্মগ্রুপের সাথে বৈধকরণের সময় সমস্যা তৈরি, যে কোনও মন্তব্য
পারদীপ জৈন

ইনপুট এলেন্ট যদি অন্য উপাদান হয় তবে আমি কীভাবে পরিচালনা করব। আমি কীভাবে fomrcontrol- র উপাদানটি বেঁধে দেব
রামকান্ত রেড্ডি

20

[formControl]FormControlআপনি তৈরি করা দৃষ্টান্তের জন্য একটি রেফারেন্স বরাদ্দ করে FormControlDirective

formControlName নাম অনুসারে নিয়ন্ত্রণ সন্ধান করতে ফর্মগুলির মডিউলটির জন্য একটি স্ট্রিং বরাদ্দ করে।

আপনি যদি নিয়ন্ত্রণগুলির জন্য ভেরিয়েবলগুলি তৈরি করেন .তবে হ্যারি দ্বারা উল্লিখিত অনুসারে আপনারও প্রয়োজন হবে না , তবে আমি [formGroup]পরিবর্তে ব্যবহার করার পরামর্শ দেব কারণ আরও জটিল আকারের সাথে এটি অগোছালো হয়ে যেতে পারে।

constructor(fb: FormBuilder) {
    this.fullName = new FormControl('', Validators.required);
    this.gender = new FormControl('');
    this.myForm = fb.group({
        'fullname': this.fullName,
        'gender': this.gender
    });
}

আমি যখন এটি যুক্ত করব ull ফুলনেম = নতুন ফর্মকন্ট্রোল ('', Validators.required); আপনি যেমন বরাদ্দ করতে পারবেন না তেমন একটি ত্রুটি পেয়েছি কারণ এটি কেবলমাত্র পঠনযোগ্য সম্পত্তি বা ধ্রুবক, তবে এখানে আমাকে ভেরিয়েবল হিসাবে নেওয়া হয়েছে
o তাই

4
সঠিক ত্রুটি বার্তা পোস্ট করুন । আপনার কোড সহ এমন একটি নতুন প্রশ্ন তৈরি করা সম্ভবত আরও ভাল যা পুনরুত্পাদন করতে পারে
গন্টার জ্যাচবাউয়ার

7

গৃহীত উত্তরে প্রদত্ত দু'জনের তৃতীয় সমতা রয়েছে যা এটি (প্রস্তাবিত নয়):

<div [formGroup]="myForm">
  <input type="text" [formControl]="firstName"/>
  <input type="text" [formControl]="lastName"/>
  <input type="text" [formControl]="email"/>
  <input type="text" [formControl]="title"/>
</div>

লক্ষ্য করুন যে আমরা এখনও [ফর্মগ্রুপ] নির্দেশনাটি ব্যবহার করছি।

যাইহোক, এই টেমপ্লেটটি ত্রুটি ছাড়াই সংকলন করার জন্য, তারপরে আপনার উপাদানগুলিকে নিয়ন্ত্রণগুলি AbstractControls হিসাবে ঘোষণা করতে হবে এবং ফর্মকন্ট্রোল হিসাবে নয়:

myComponent.ts

firstName: AbstractControl
lastName: AbstractControl
email: AbstractControl
title: AbstractControl

তবে দয়া করে নোট করুন যে অ্যাবস্ট্রাক্ট্রন্টলগুলি ঘোষণার প্রস্তাব দেওয়া হয় না , সুতরাং যদি আপনি ত্রুটিটি পান Cannot find control with unspecified name attributeতবে সম্ভবত আপনি শৈলীগুলি মিশ্রিত করেছেন বা আপনার নিয়ন্ত্রণগুলি অ্যাবস্ট্রাক্ট্রন্টল হিসাবে ঘোষণা করেছেন।


ইনপুট এলেন্ট যদি অন্য উপাদান হয় তবে আমি কীভাবে পরিচালনা করব। আমি কীভাবে fomrcontrol- র উপাদানটি বেঁধে দেব
রামকান্ত রেড্ডি

আপনি পারবেন না - কোনও উপায় থাকলেও, আপনার করা উচিত নয়। উপাদানটি নির্ধারিত নিয়ন্ত্রণের সাথে আবদ্ধ হওয়া উচিত MP আপনি যদি কোনও উপাদানকে ডেটা পাস করতে চান তবে একটি পরিষেবা ব্যবহার করুন (বা এটি যদি প্যারেন্ট উপাদান হয় তবে ইভেন্ট ইমিটার)। গুগল কীভাবে উপাদানগুলির মধ্যে ডেটা পাস করবেন
rmcsharry

আপনি কি দয়া করে এই পোস্টটি দেখতে পারেন stackoverflow.com/questions/58100248/…
রামকণ্ঠ রেড্ডি

2

কৌনিক দস্তাবেজগুলি থেকে ( https://angular.io/guide/reactive-forms ):

উপাদান

@Component({
  ...
})
export class ProfileEditorComponent {
  profileForm = new FormGroup({
    firstName: new FormControl(''),
    lastName: new FormControl(''),
  });
}

টেমপ্লেট

<form [formGroup]="profileForm">

  <label>
    First Name:
    <input type="text" formControlName="firstName">
  </label>

  <label>
    Last Name:
    <input type="text" formControlName="lastName">
  </label>

</form>

মনে রাখবেন যে FormGroupনিয়ন্ত্রণগুলির একটি গ্রুপ রয়েছে ঠিক তেমনই প্রোফাইলফর্মটি নির্দেশের FormGroupসাথে ফর্ম উপাদানটির সাথে আবদ্ধ FormGroup, মডেল এবং ইনপুট যুক্ত ফর্মের মধ্যে একটি যোগাযোগ স্তর তৈরি করে। formControlNameদ্বারা উপলব্ধ ইনপুট FormControlNameনির্দেশ সংজ্ঞায়িত ফর্ম নিয়ন্ত্রণ প্রতিটি ইনপুট bindsFormGroup


1

আপনার সাথে [formControl]প্রতিক্রিয়াশীল প্রোগ্রামিং সুবিধাগুলি ব্যবহার করতে পারেন কারণ FormControlএর একটি সম্পত্তি রয়েছে valueChanges(আমি এই মুহূর্তে এটি জানি, সম্ভবত এর চেয়ে আরও বেশি কিছু আছে) Observableযা আপনি সাবস্ক্রাইব করতে এবং এটি ব্যবহার করতে পারবেন এমন প্রত্যাবর্তন করে। (উদাহরণস্বরূপ, এটি নিবন্ধের পরিস্থিতিতে খুব দরকারী যা আপনি ইনপুট ইমেলটি চেক করতে চান ব্যবহারকারী ব্যবহারের সাথে সাথে মূল্য পরিবর্তন করার সাথে সাথে পুনরাবৃত্তি হবে না)


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