2016-02-19 15 views
8

ho bisogno di accedere al mio servizio HTTP personalizzato dall'interno di un metodo statico, come ad esempio:Accedere a un servizio da un validatore personalizzato in Angular2

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

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

Come posso accedere a un servizio in questo caso?

+0

La prego di mettere più snippet del codice? – micronyks

+0

Che cos'è HTTPService? Mettilo in snippet. – micronyks

risposta

4

Un altro approccio consiste nel restituire una funzione. In questo modo questa funzione può avere accesso a HttpService esempio fornito durante la creazione:

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

è quindi possibile utilizzare in quel modo:

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

Sì. Ho appena fatto ciò dopo che Günter Zöchbauer ha risposto :) – Silencer

+0

All'inizializzazione di FormControl in questo modo: 'username: ['', [Validators.required, UsernameValidator.createUsernameExist (this.httpService)]] Sto ricevendo un errore" TypeError: UsernameValidator.createUsernameExist non è una funzione ", come farlo funzionare? – mdziob

+1

Sto seguendo questo esempio e posso vedere l'output del registro di ogni caso, ma il mio campo non è mai valido. Come dovrebbe apparire la chiamata di servizio? Questo è quello che sto usando. ritorno (controllo: Control). => { .../* Accesso mia HTTPService qui */ \t ritorno myService.getStuff() sottoscrivere (data => { \t \t se (cattivo) { \t \t ritorno { Bad: true} } else { \t ritorno null;} \t}} –

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

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

poi usarlo come

validator: new UsernameValidator(http).usernameExist 

Le HttpService deve essere iniettato nel costruttore componente invece e quindi passato al validatore esempio creato manualmente come mostrato sopra.

+0

Quindi devo creare nuovi oggetti per ogni validatore asincrono? Sarebbe una buona idea implementare il mio validatore come il built-in 'Validators.minLength (12)' e passare l'http come parametro? – Silencer

+0

Certo, se lo si usa come direttiva di 'HttpService' può essere iniettato direttamente. Ho assunto FormBuilder. –

+0

Grazie per la tua risposta, dopo aver implementato la stessa cosa che Thierry ha dato, ho accettato la sua risposta. – Silencer