2016-02-19 16 views
8

मैं एक स्थिर विधि के अंदर से अपने कस्टम http सेवा का उपयोग करने की जरूरत है एक कस्टम सत्यापनकर्ता से एक सेवा एक्सेस, उदाहरण के रूप में:Angular2

import {Control} from 'angular2/common'; 
import {HttpService} from './http.service'; 

class UsernameValidator { 
    static usernameExist(control: Control): Promise<ValidationResult> { 
     ... /* Access my HTTPservice here */ 
    } 
} 

मैं कैसे इस मामले में एक सेवा का उपयोग कर सकते हैं?

+0

आप अपने कोड के अधिक स्निपेट यहीं कर सकते हैं? – micronyks

+0

HTTPService क्या है? इसके स्निपेट रखो। – micronyks

उत्तर

4

एक और दृष्टिकोण में एक समारोह लौटने में शामिल है। इस तरह से इस समारोह HttpService निर्माण के दौरान प्रदान की उदाहरण के लिए उपयोग किया जा सकता है:

class UsernameValidator { 
    static createUsernameExist(http:HttpService) { 
    return (control: Control) => { 
     ... /* Access my HTTPservice here */ 
    } 
    } 
} 

फिर आप ऐसा कर सकते हैं:

validator: UsernameValidator.createUsernameExist(this.httpService) 
+0

हाँ। मैंने बस ऐसा किया कि गुंटर ज़ोचबॉयर ने जवाब दिया :) – Silencer

+0

इस तरह फॉर्मकंट्रोल प्रारंभ करते समय: 'उपयोगकर्ता नाम: ['', [वैलिडेटर.क्रिक्टेड, उपयोगकर्ता नाम Validator.createUsernameExist (this.http सेवा)]] मुझे एक त्रुटि मिल रही है" TypeError: UsernameValidator.createUsernameExist फ़ंक्शन नहीं है ", यह काम कैसे करें? – mdziob

+1

मैं इस उदाहरण का अनुसरण कर रहा हूं और मैं प्रत्येक मामले का लॉग आउटपुट देख सकता हूं लेकिन मेरा क्षेत्र कभी मान्य नहीं है। सेवा कॉल कैसा दिखना चाहिए? मैं यही उपयोग कर रहा हूँ। वापसी (नियंत्रण: नियंत्रण)। => { .../* एक्सेस मेरी HTTPservice यहाँ */ \t वापसी myService.getStuff() सदस्यता के (डेटा => { \t \t अगर (बुरा) { \t \t वापसी { खराब: सत्य} } अन्य { \t वापसी शून्य; } \t} } –

2
class UsernameValidator { 
    constructor(http:HttpService){} 

    usernameExist(control: Control): Promise<ValidationResult> { 
     ... /* Access my HTTPservice here */ 
    } 
} 

तो जैसे

validator: new UsernameValidator(http).usernameExist 

इसका इस्तेमाल HttpService जरूरतों घटक निर्माता के रूप में ऊपर दिखाए गए बजाय और फिर मैन्युअल रूप से बनाई गई सत्यापनकर्ता उदाहरण के लिए पारित में इंजेक्ट किया जा करने के लिए।

+0

तो मुझे प्रत्येक async वैलिडेटर के लिए नई ऑब्जेक्ट्स बनाना है? क्या मेरे वैधकर्ता को अंतर्निहित 'Validators.minLength (12)' को लागू करना और पैरामीटर के रूप में http को पास करना अच्छा विचार होगा? – Silencer

+0

निश्चित रूप से, यदि आप इसे 'HttpService' की तुलना में निर्देश के रूप में उपयोग करते हैं तो सीधे इंजेक्शन दिया जा सकता है। मैंने फॉर्मबिल्डर माना। –

+0

आपके उत्तर के लिए धन्यवाद, इसके बाद मैंने थियरी ने वही काम लागू किया, इसलिए मैंने उसका जवाब स्वीकार कर लिया। – Silencer