Wie schreibe ich einen Service-Konstruktor, der Parameter in angular 2 benötigt?

8

Ich habe eine Komponente, die den Service MetricsService deklariert. Dieser Dienst benötigt sowohl HTTP-Module als auch zwei Zeichenfolgen, die den Host und den zu verwendenden Authentifizierungsschlüssel definieren.

Der Metrikservice ist wie folgt:

%Vor%

Die Komponente, die es verwendet, ist wie folgt geschrieben:

%Vor%

Meine Frage ist, wie soll ich den Komponentenkonstruktor schreiben, so dass das Ganze funktioniert, einschließlich der Übergabe des Hosts und des Schlüssels (aber nicht die Weitergabe des http)?

Hinweis: Der aktuell geschriebene Code wird nicht kompiliert.

Um genauer zu sein, würde ich erwarten, dass die Komponente app-abhängige Daten in etwa wie folgt bereitstellt:

%Vor%

Aber wenn das funktioniert, wie kann man http weitergeben?

AKTUALISIEREN NACH VORGESCHLAGENER LÖSUNG:

%Vor%

In der Komponente:

%Vor%

Im Konstruktor lautet das Protokoll wie folgt (Wert wird nicht übergeben):

%Vor%

wo es 'abc' und 'efg' zeigen soll.

Aber ich frage mich, ob es ein Problem mit der Komponente, die DataViz-Komponente verwenden. In dieser Komponente wurden die folgenden Informationen übergeben:

%Vor%

Wie ich möchte, dass das Tag den Host und den Schlüssel optional voreinstellt:

%Vor%     
Stéphane de Luca 22.02.2017, 16:16
quelle

3 Antworten

14

Sie können die Parameter optional machen, indem Sie @Optional() (DI) und ? (TypeScript) und @Inject(somekey) für primitive Werte hinzufügen, die nicht als Providerschlüssel

unterstützt werden %Vor% %Vor%

Wenn sie angegeben werden, werden sie übergeben, andernfalls werden sie ignoriert, aber DI kann weiterhin MetricsService einfügen.

    
Günter Zöchbauer 22.02.2017 16:34
quelle
7

Dies ist ein gängiges Rezept, das insbesondere in dieser Frage beschrieben wird . Es sollte ein Dienst sein, der die Konfiguration enthält:

%Vor%

Wenn es geändert werden muss, kann es für das gesamte Modul oder für eine bestimmte Komponente überschrieben oder erweitert werden:

%Vor%

Es besteht keine wirkliche Notwendigkeit, in diesem Fall MetricsConfig zu einer Klasse zu machen. Es kann auch ein OpaqueToken-Wertanbieter sein. Aber eine Klasse kann bequem erweitert werden, es ist einfacher zu injizieren und bietet bereits eine Schnittstelle zum Tippen.

    
estus 22.02.2017 16:33
quelle
0

Aus den offiziellen Dokumenten: Ссылка

Verwenden Sie einen @Optional Dekorator im Konstruktor:

%Vor%     
Gus 19.03.2018 17:56
quelle