प्रोमिस या ऑब्ज़र्वेबल को वापस करने के लिए अपेक्षित सत्यापनकर्ता


111

Im कोणीय 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;
}

क्या कोई मेरी मदत कर सकता है? क्या उस प्रकार की मान्यता केवल वेधशालाओं के साथ काम करती है या क्या मैं एक वादा या पालन किए बिना कर सकता हूं? धन्यवाद

जवाबों:


329

इसका अर्थ है कि आपको सरणी में कई सत्यापनकर्ता जोड़ना होगा

। उदाहरण:

त्रुटि के साथ

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

ऊपर एक त्रुटि है कि सत्यापनकर्ता वादा या अवलोकनीय लौटाता है

ठीक कर:

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

स्पष्टीकरण:

कोणीय प्रतिक्रियात्मक रूप में निर्मित सत्यापनकर्ताओं का उपयोग करके किया जाता है, जो कि दूसरी मुद्रा में सरणी में दिया जा सकता है, जब कई सत्यापनकर्ता उपयोग करते हैं

FIELD_KEY: [INITIAL_VALUE, [LIST_OF_VALIDATORS]]


1
दिलचस्प बात यह है कि मैंने स्वीकार किए गए / लोकप्रिय उत्तर से सत्यापनकर्ताओं के चारों ओर कोष्ठक को पूरी तरह से याद किया। आपने समस्या और समाधान दोनों की ओर संकेत किया।
CPHPython

आपका पहला बिंदु सही उत्तर है। इस उत्तर को सही चिह्नित किया जाना चाहिए।
वैलेंटिनो परेरा

1
कोणीय लोगों पर शर्म! समस्या बिल्कुल भी देखने योग्य नहीं है, यह सरणी वाक्यविन्यास है
happyZZR1400

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

सीधे ओपी के सवाल से संबंधित नहीं है, लेकिन मुझे थोड़ी अलग समस्या पर एक ही त्रुटि मिली। मेरे पास एक async सत्यापनकर्ता था, लेकिन मैं इसमें से एक अवलोकन योग्य (या वादा) वापस करना भूल गया।

यहाँ मेरा मूल async सत्यापनकर्ता था

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

बात यह है कि अगर बयान गलत है तो क्या होगा? हम कुछ भी वापस नहीं करते हैं, और हमें एक रनटाइम त्रुटि मिलती है। मैंने रिटर्न प्रकार जोड़ा (यह सुनिश्चित करते हुए कि यदि हम सही प्रकार नहीं लौटाते हैं, तो आईडीई शिकायत करता है), और फिर मैं of(true)इस मामले में वापसी करता हूं कि अगर-वाक्य विफल हो रहा है।

यहाँ अद्यतन async सत्यापनकर्ता है।

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

1

Validators.compose () बेमानी है;

आप बस एक सरणी पास कर सकते हैं। ओपी की समस्या उन्हें एक सरणी बनाने के लिए सत्यापनकर्ताओं को [] में लपेटने में विफलता के कारण होती है, इसलिए minLength () एक को async और परिणामस्वरूप त्रुटि संदेश माना जाता है।

मुझे उम्मीद है, यह समाधान आपकी मदद करेगा। धन्यवाद।


हाँ। मैंने Validators.compose ([]) का उपयोग किया। इसने मेरे लिए काम किया
कुमारसन पेरुमल

1

त्रुटि: userName: ['', [Validators.required, Validators.minLength (3)], निषिद्ध NameValidator (/ पासवर्ड /)]

ans: userName: ['', [Validators.required, Validators.minLength (3), निषिद्ध NameValidator (/ पासवर्ड /)]],

सत्यापनकर्ता अंदर सरणी में केवल दूसरे पैरामीटर का उपयोग करते हैं। बाहरी सरणी के लिए नहीं


“यह सवाल का जवाब नहीं दे सकता है। कृपया उचित स्पष्टीकरण जोड़ें। एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे; इसके बजाय, ऐसे उत्तर प्रदान करें, जिन्हें पूछने वाले से स्पष्टीकरण की आवश्यकता नहीं है। ”
पुष्कर

1

यदि आप कई सत्यापनकर्ता जोड़ते हैं, तो आपको एक और तीसरा ब्रैकेट '[]' जोड़ने की आवश्यकता है और उसके अंदर, आपको अपने सत्यापनकर्ता को रखना चाहिए। नीचे की तरह:

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


0

मुझे लगता है कि स्वीकार किए गए उत्तर के अलावा यह स्पष्ट करना अच्छा है कि त्रुटि तब होती है क्योंकि जब FormControl बनाने के लिए प्रतिक्रियाशील रूपों का उपयोग किया जाता है, तो शुरुआती तर्कों के बाद, क्रमशः, तुल्यकालिक सत्यापनकर्ता और async सत्यापनकर्ता एक सरणी के रूप में समूहीकृत होते हैं। । उदाहरण के लिए:

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

यदि नियंत्रण केवल एक में से होता है, तो कोणीय इसे एक तत्व के रूप में स्वीकार करता है। उदाहरण के लिए:

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

इसलिए, जब उन्हें समूहीकृत करने के लिए कोष्ठक के बारे में भूल जाते हैं तो कोणीय दूसरे सत्यापनकर्ता आइटम को Async सत्यापनकर्ताओं का हिस्सा मानता है और इसलिए हम प्राप्त करते हैं Expected validator to return Promise or Observable

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.