প্রত্যাশিত বৈধকারীর প্রতিশ্রুতি বা পর্যবেক্ষণযোগ্য ফিরে আসবে


103

আমি কৌনিক 5 এ একটি কাস্টম বৈধতা দেওয়ার চেষ্টা করছি তবে আমি নিম্নলিখিত ত্রুটির মুখোমুখি

Expected validator to return Promise or Observable

মানটি যদি প্রয়োজনীয়তার সাথে মেলে না, আমি কেবল ফর্মটিতে একটি ত্রুটি ফিরিয়ে দিতে চাই, আমার কোডটি এখানে:

এটি আমার উপাদান যেখানে এই উপাদান

  constructor(fb: FormBuilder, private cadastroService:CadastroService) {
    this.signUp = fb.group({
      "name": ["", Validators.compose([Validators.required, Validators.minLength(2)])],
      "email": ["", Validators.compose([Validators.required, Validators.email])],
      "phone": ["", Validators.compose([Validators.required, Validators.minLength(5)])],
      "cpf": ["", Validators.required, ValidateCpf]
    })     
   }

এই কোডটি যাচাইয়ের সাথে ফাইলটিতে আমি প্রয়োগ করতে চাই:

import { AbstractControl } from '@angular/forms';

export function ValidateCpf(control: AbstractControl){
    if (control.value == 13445) {
        return {errorCpf: true}
    }
    return null;
}

কেউ আমাকে সাহায্য করতে পারেন? এই ধরণের বৈধতা কি কেবল পর্যবেক্ষণযোগ্যদের সাথেই কাজ করে বা আমি কোন প্রতিশ্রুতি বা পর্যবেক্ষণযোগ্য না হয়ে কি পারি? ধন্যবাদ

উত্তর:


306

এর অর্থ হল আপনাকে অ্যারেতে একাধিক ভ্যালিডিটার যুক্ত করতে হবে

। উদাহরণ:

ত্রুটি সহ

profileFormGroup = {
  budget: [null, Validators.required, Validators.min(1)]
};

উপরের ত্রুটিটি ছুঁড়ে ফেলেছে যে প্রতিশ্রুতি বা পর্যবেক্ষণযোগ্য ফিরিয়ে দিতে বৈধতা দেয়

স্থির করুন:

profileFormGroup = {
  budget: [null, [Validators.required, Validators.min(1)]]
};

ব্যাখ্যা:

কৌণিক প্রতিক্রিয়াশীল ফর্ম বৈধতা মধ্যে অন্তর্নির্মিত বৈধতা যা দ্বিতীয় পদে অ্যারে দেওয়া যেতে পারে ব্যবহার করে সম্পন্ন হয়েছে, যখন একাধিক ভ্যালিডিটার ব্যবহার করা হয়

FIELD_KEY: [INITIAL_VALUE, [LIST_OF_VALIDATORS]]


4
মজার বিষয় হল, আমি গৃহীত / জনপ্রিয় উত্তর থেকে ভ্যালিডেটরগুলির কাছাকাছি বন্ধনীগুলি পুরোপুরি মিস করেছি। আপনি সমস্যা এবং সমাধান উভয়ই ভালভাবে নির্দেশ করেছেন।
সিপিএইচপিথন

আপনার প্রথম বিষয়টি সঠিক উত্তর .. এই উত্তরটি সঠিকভাবে চিহ্নিত করা উচিত।
ভ্যালেন্টিনো পেরেইরা

4
অসাধারণ অনেক ধন্যবাদ
রবি রাজপুত

4
কৌণিক ছেলেদের জন্য লজ্জা! সমস্যাটি মোটেও পর্যবেক্ষণযোগ্য নয়, এটি অ্যারে সিনট্যাক্স
হ্যাপিজেডআর 1400

42

নিম্নলিখিতগুলি কাজ করা উচিত:

  "cpf": ["", [Validators.required, ValidateCpf]]

ফর্ম নিয়ন্ত্রণ প্রত্যাশা যুক্তি নিম্নলিখিত:

constructor(formState: any = null, 
            validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,
            asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null)

https://angular.io/api/forms/FormControl থেকে


2

ওপির প্রশ্নের সাথে সরাসরি সম্পর্কিত নয়, তবে আমি কিছুটা ভিন্ন সমস্যাতে একই ত্রুটি পেয়েছি। আমার একটি অ্যাসিঙ্ক বৈধকরণকারী ছিল, তবে আমি এটি থেকে একটি পর্যবেক্ষণযোগ্য (বা প্রতিশ্রুতি) ফিরিয়ে দিতে ভুলে গিয়েছিলাম।

এখানে আমার মূল অ্যাসিঙ্ক বৈধকরণকারী ছিল

public availableEmail(formControl: FormControl) {
   if(formControl && formControl.value){
     return this.http.get('')
   }
}

কথা হ'ল, যদি-বিবৃতিটি মিথ্যা হয়? আমরা কোনও কিছুই ফিরিয়ে দিই না এবং আমরা রানটাইম ত্রুটি পাই। আমি রিটার্নের প্রকারটি যুক্ত করলাম (যদি আমরা সঠিক ধরণের প্রত্যাবর্তন না করে তবে আইডিই অভিযোগ করে তা নিশ্চিত করে) এবং তারপরে আমি of(true)যদি বাক্য-বাক্যটি ব্যর্থ হয় তবে আমি ফিরে আসি ।

এখানে আপডেট করা আসিঙ্ক বৈধকারক।

public availableEmail(formControl: FormControl): Observable<any> {
   if(formControl && formControl.value){
     return this.http.get('someUrl');
   }
   return of(true);
}

1

Validators.compose () অপ্রয়োজনীয়;

আপনি কেবল একটি অ্যারে পাস করতে পারেন। ওপি'র সমস্যাটি []] এ বৈধতা দেওয়ার জন্য [] এ আরে তৈরি করতে ব্যর্থ হওয়ার কারণে ঘটে, তাই minLength () একটিকে async এবং ফলস্বরূপ ত্রুটি বার্তা বলে মনে করা হয়।

আমি আশা করি, এই সমাধান আপনাকে সাহায্য করবে। ধন্যবাদ


হ্যাঁ আমি ভ্যালিডেটর ডটকম পোস্ট ([]) ব্যবহার করেছি। এটি আমার পক্ষে কাজ করেছে
কুমারসান পেরুমাল

1

ত্রুটি: ব্যবহারকারীর নাম: ['', [Validators.requided, Validators.minLength (3)], নিষিদ্ধ নেমভেদিটর (/ পাসওয়ার্ড /)],

উত্তর: ব্যবহারকারীর নাম: ['', [Validators.requided, Validators.minLength (3), নিষিদ্ধ নামভালিডেটর (/ পাসওয়ার্ড /)]],

বৈধকারকরা ভিতরে অ্যারেতে কেবলমাত্র দ্বিতীয় প্যারামিটার ব্যবহার করে। বাইরের অ্যারে জন্য নয়


“এটি প্রশ্নের উত্তর নাও দিতে পারে। সঠিক ব্যাখ্যা যোগ করুন। আপনার যথেষ্ট খ্যাতি অর্জনের পরে আপনি কোনও পোস্টে মন্তব্য করতে সক্ষম হবেন; পরিবর্তে, এমন উত্তরগুলি সরবরাহ করুন যা জিজ্ঞাসাবাদীর কাছ থেকে স্পষ্টতার প্রয়োজন হয় না। "
পুষ্কর

1

আপনি যদি একাধিক ভ্যালিডিটার যুক্ত করেন, তবে আপনাকে আরও একটি তৃতীয় বন্ধনী '[]' যুক্ত করতে হবে এবং এর ভিতরে আপনার ভ্যালিডিটারগুলি রাখা উচিত। নীচের মত:

this.yourForm= this.formBuilder.group({
    amount: [null, [Validators.required, Validators.min(1)]],
});


0

আমি মনে করি যে গৃহীত উত্তর ছাড়াও ত্রুটি ঘটেছিল তা স্পষ্ট করে দেওয়া ভাল কারণ একটি ফর্মকন্ট্রোল তৈরির জন্য প্রতিক্রিয়াশীল ফর্মগুলি ব্যবহার করার সময়, প্রাথমিক_মূল্যের পরে যথাক্রমে সিঙ্ক্রোনাস ভ্যালিডিটার এবং অ্যাসিঙ্ক ভ্যালিডিটারগুলি প্রতিটি অ্যারের আকারে গোষ্ঠীভুক্ত হয় । যেমন:

myFormGroup = this.fb.group({
    myControl: ['', [ mySyncValidators ], [ myAsyncValidators ] ]
})

যদি নিয়ন্ত্রণের মধ্যে দুটির মধ্যে একটিরও হয়ে থাকে তবে কৌণিক এটিকে একক উপাদান হিসাবে গ্রহণ করে। যেমন:

myFormGroup = this.fb.group({
    myControl: ['', mySyncValidator, myAsyncValidator ]
})

সুতরাং, যখন তাদের বন্ধুত্বের জন্য বন্ধনীগুলি ভুলে গিয়েছিলেন তখন কৌণিক অনুমান করে যে দ্বিতীয় বৈধকারী আইটেমটি অ্যাসিঙ্ক যাচাইকারীদের অংশ এবং তাই আমরা পাই Expected validator to return Promise or Observable

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