কৌণিক ক্ষেত্রে, নিয়ন্ত্রণ তৈরির পরে কীভাবে ভ্যালিডেটরকে ফর্মকন্ট্রলে যুক্ত করবেন?


89

আমাদের একটি উপাদান রয়েছে যা গতিশীলভাবে নির্মিত ফর্ম রয়েছে। ভ্যালিডেটরগুলির সাথে একটি নিয়ন্ত্রণ যুক্ত করার কোডটি দেখতে এই জাতীয় দেখাচ্ছে:

var c = new FormControl('', Validators.required);

তবে আসুন আমরা বলি যে আমি পরে 2 য় ভ্যালিডেটর যুক্ত করতে চাই । আমরা কীভাবে এটি সম্পাদন করতে পারি? আমরা অনলাইনে কোনও ডকুমেন্টেশন খুঁজে পাই না। আমি খুঁজে পেয়েছি যদিও ফর্ম নিয়ন্ত্রণে সেটভালিডেটর রয়েছে

this.form.controls["firstName"].setValidators 

তবে কীভাবে নতুন বা কাস্টম বৈধকারক যুক্ত করবেন তা পরিষ্কার নয়।

উত্তর:


119

আপনি কেবলমাত্র ফর্মকন্ট্রোলকে বৈধতার একটি অ্যারে পাস করুন ray

আপনি কীভাবে বিদ্যমান ফর্মকন্ট্রলে বৈধতা যোগ করতে পারেন তা দেখানোর একটি উদাহরণ এখানে দেওয়া হয়েছে:

this.form.controls["firstName"].setValidators([Validators.minLength(1), Validators.maxLength(30)]);

দ্রষ্টব্য, আপনি ফর্মকন্ট্রোল তৈরি করার সময় এটি যুক্ত করা যে কোনও বিদ্যমান বৈধতা পুনরায় সেট করবে।


4
হা ... কখনও কখনও আপনি এত দীর্ঘ কিছু তাকান স্রেফ সরে যাওয়া ভাল। ধন্যবাদ!!
মার্চেন্ট

4
বৈধতা অপসারণ করার কোনও উপায় আছে
অভিজিথ এসএস

7
পুরানোগুলি ওভাররাইড না করে এটি করার কোনও উপায়? বা নতুন উপায়ে কোন উপায়?
danday74

4
@ danday74, এই প্রশ্নের নীচে এডুয়ার্ড ভয়েডের উত্তর পরীক্ষা করে দেখুন। উত্তর গ্রহণ করা উচিত imo। তিনি আপনাকে যা জানা দরকার তা কীভাবে করবেন তা ব্যাখ্যা করেছেন, যা আমার কীভাবে কীভাবে করা উচিত তাও জানতে হবে।
ক্রিস

8
.updateValueAndValidity()নতুন ভ্যালিডিটার সেট করার পরে আমাকে ফর্ম নিয়ন্ত্রণেও কল করতে হয়েছিল।
কীলিয়ন

91

@ দেলোসডোস যা পোস্ট করেছে তাতে যুক্ত করতে।

এতে নিয়ন্ত্রণের জন্য একটি বৈধকারক সেট করুন FormGroup: this.myForm.controls['controlName'].setValidators([Validators.required])

ফর্মগ্রুপের নিয়ন্ত্রণ থেকে বৈধতা সরান : this.myForm.controls['controlName'].clearValidators()

উপরের যে কোনও লাইনটি চালানোর পরে ফর্মগ্রুপটি আপডেট করুন। this.myForm.controls['controlName'].updateValueAndValidity()

এটি আপনার ফর্মটির বৈধতা প্রোগ্রামক্রমে সেট করার একটি দুর্দান্ত উপায়।


4
আমার জন্য এটি শেষ লাইনটি ছাড়া কাজ করেছিল, আমি খুব নিশ্চিত অ্যাঙ্গুলারের নতুন সংস্করণগুলি নিজেরাই ফর্মের বৈধতা আপডেট করে। কিন্তু updateValueAndValidityপদ্ধতি সম্পর্কে আমাদের বলার জন্য ধন্যবাদ , একদিন কার্যকর হতে পারে!
নিনো ফিলিউ

@ নিনোফিলিউ updateValueAndValidityএখনও বৈধতা সম্পাদন করতে ব্যবহৃত হয়, এবং কৌণিকের নতুন সংস্করণগুলিতে কোনও ভিন্নভাবে পরিচালিত হয় না। যা ঘটে তা setValidatorsযাচাইকারীদের আপডেট করে তবে বৈধতা যাচাই করে না এবং তারপরে আপনি updateValueAndValidityযাচাইকরণ করতে ব্যবহার করেন। আপনাকে অবশ্যই এমন এক পর্যায়ে বৈধতা নির্ধারণ করতে হবে যেখানে পরিবর্তন সনাক্তকরণ এটি আপনার জন্য পরিচালনা করে, তবে আপনি updateValueAndValidityগ্রুপটি বা নিয়ন্ত্রণটি ব্যবহার করে দেখতে পাচ্ছেন যে আপনি ঠিক কীটি কার্যকর করেছেন তা নির্ধারণ করে - github.com/angular/angular/issues/19622#issuecomment- 341547884
এমটিপল্টজ

4
আমি কৌনিক 6 এ আছি এবং এটি ছাড়া এটি কাজ করতে পারি না updateValueAndValidity। ধন্যবাদ @ শামেলবার্গ!
অলি ক্র্ট

4
অ্যাঙ্গুলার 7 এ এবং এটি সর্বশেষ আপডেট লাইন ছাড়া আমার পক্ষে কাজ করবে না।
ডেভিড ফান্ডলে

হ্যাঁ. এটি ছাড়া কাজ করছে updateValueAndValidity(), তবে কিছু ক্ষেত্রে তা হয় না। যদি আপনি এটি যুক্ত করে থাকেন updateValueAndValidity()তবে setValidators()এটি তাত্ক্ষণিকভাবে নিয়ন্ত্রণ সম্পর্কিত পরিবর্তনগুলিকে প্রভাবিত করবে । সুতরাং আপডেটভ্যালুঅ্যান্ডভালিডিটি () `যুক্ত করা আরও ভাল`
জামিথ নিমিতা

78

আপনি যদি প্রতিক্রিয়াশীল ফর্মমডিউল ব্যবহার করছেন এবং ফর্মগ্রুপটি এর মতো সংজ্ঞায়িত করা থাকে:

public exampleForm = new FormGroup({
        name: new FormControl('Test name', [Validators.required, Validators.minLength(3)]),
        email: new FormControl('test@example.com', [Validators.required, Validators.maxLength(50)]),
        age: new FormControl(45, [Validators.min(18), Validators.max(65)])
});

আপনি এই পদ্ধতির সাথে ফর্মকন্ট্রোলটিতে একটি নতুন বৈধকারী ( এবং পুরানোগুলি রাখুন) যুক্ত করতে সক্ষম হওয়ার চেয়ে:

this.exampleForm.get('age').setValidators([
        Validators.pattern('^[0-9]*$'),
        this.exampleForm.get('age').validator
]);
this.exampleForm.get('email').setValidators([
        Validators.email,
        this.exampleForm.get('email').validator
]);

ফর্মকন্ট্রোল.অডিয়ালিটার সমস্ত সংজ্ঞায়িত ভ্যালিডেটর সমন্বিত একটি রচনাযুক্ত যাচাইকারীকে ফেরত দেয়।


13
ইমো এটির স্বীকৃত উত্তর হওয়া উচিত। এটি ওপি-র অনুরোধের মতো বৈধতা সংযোজনকারীদের কীভাবে যুক্ত করবেন তা প্রদর্শন করে, তবে পূর্ববর্তী সেট ভ্যালিডেটরগুলি কীভাবে বজায় রাখা যায় তাও আপনাকে দেখায়; গ্রহণযোগ্য উত্তরটি পড়ার পরে আমি কীভাবে প্রথমে গুগল করেছিলাম, কারণ আমি ইতিমধ্যে আমার কাছে থাকা কিছু ভ্যালিডেটর ওভাররাইট করতে চাইনি, তবে তবুও ক্রমবর্ধমানভাবে অতিরিক্ত যুক্ত করতে হবে। এই উত্তরের জন্য আপনাকে ধন্যবাদ @ এডওয়ার্ড অকার্যকর
ক্রিস

4
আমি আমার পূর্বসূরীর সাথে একমত প্রশ্নের কেমন ছিল যোগ নিয়ন্ত্রণ ফর্ম থেকে নতুন যাচাইকারী, কিভাবে না প্রতিস্থাপন করুন।
প্লাসে

6
আমি control.setValidators(control.validator ? [ control.validator, Validators.email ] : Validators.email);কঠোর নাল চেকগুলি পেয়েছিলাম
উইলিয়াম লোহান

3

আমি মনে করি নির্বাচিত উত্তরটি সঠিক নয়, কারণ মূল প্রশ্নটি "ফর্মকন্ট্রোল তৈরির পরে কীভাবে একটি নতুন বৈধকারক যুক্ত করবেন" is

আমি যতদূর জানি, এটি সম্ভব নয়। কেবলমাত্র আপনি যা করতে পারেন তা হ'ল বৈধকরণকারীর গতিশীলতার অ্যারে তৈরি করা।

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


4
আপনি ভাববেন control.setValidators(control.validator ? [ control.validator, Validators.email ] : Validators.email);যে কাজ করবে।
উইলিয়াম লোহান

4
@Eduard দেখুন অকার্যকর 'র উত্তর stackoverflow.com/a/53276815/6656422
উইলিয়াম লোহান

3

এডওয়ার্ড অকার্যকর উত্তর ছাড়াও এখানে addValidatorsপদ্ধতিটি:

declare module '@angular/forms' {
  interface FormControl {
    addValidators(validators: ValidatorFn[]): void;
  }
}

FormControl.prototype.addValidators = function(this: FormControl, validators: ValidatorFn[]) {
  if (!validators || !validators.length) {
    return;
  }

  this.clearValidators();
  this.setValidators( this.validator ? [ this.validator, ...validators ] : validators );
};

এটি ব্যবহার করে আপনি গতিশীলভাবে বৈধতা নির্ধারণ করতে পারেন:

some_form_control.addValidators([ first_validator, second_validator ]);
some_form_control.addValidators([ third_validator ]);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.