2017-05-30 4 views
0

Ich habe eine einfache Form Validator-Funktion.Zugriff auf einen Singleton-Service von einer Formular-Validierer-Funktion

static required(control: FormControl) { 
if (control.value == null || control.value.length <= 0) 
     return {'required': false, 'errorMsg': 'Value is required'} 
    return null 
} 

Ich möchte, es ändern, damit es nicht eine hartkodierte errorMsg aber eine lokalisierte Nachricht zurück. Das Problem ist, dass es sich weigert, mit meinem Lokalisierungsdienst zu arbeiten, der LocaleService genannt wird.

Der Dienst hat eine einzige Stütze namens locale. Es ist ein JSON-Objekt, das alle lokalisierten Nachrichten enthält. In Komponenten ist es ziemlich einfach zu verwenden: Ich erstelle nur eine private Instanz im Konstruktor, und dort ist es zugänglich.

Aber die Validator-Klasse will das nicht. Für den Anfang, wenn ich versuche, dies zu tun:

import {LocaleService} from '../services/locale.service'; 
export class FormValidators { 

    constructor(private _localeService: LocaleService) {} 

    static required(control: FormControl) { 
     if (control.value == null || control.value.length <= 0) 
      return {'required': false, 'errorMsg': 'Value required'} 
     return null 
    } 
} 

die gesamte Sache sofort bricht und wird nicht einmal bauen. Die Fehlermeldung lautet:

Uncaught Error: Can't resolve all parameters for FormValidators: (?). 

Ich habe versucht, eine Instanz von LocaleService in der statischen Funktion zu schaffen, aber es funktioniert nicht zulassen. Es erlaubt auch nicht, es als Parameter zu übergeben oder von einer globalen Variable zu bekommen. Es ist immer ein Fehler.

Wie kann ich diese Funktion erhalten, um mit dem Dienst zu sprechen?

+0

ist Ihr LocaleService '@ injizierbar'? –

+0

Ja, es ist @Injectable. –

Antwort

0

Hier ist die Lösung. Ein Singleton-Service als Provider sollte nur im [providers]-Teil von app.module.ts definiert werden. Mein Fehler war es, es auch zu meinem AppComponent hinzuzufügen, und dies verursachte die DI, um neue Instanzen in Diensten zu erstellen, aber nicht in untergeordneten Komponenten.

Verwandte Themen