Angular 2.0.2: ActivatedRoute ist in einem Service leer

9

Ich möchte ActivatedRoute verwenden, um Routenparameter in einem Dienst zu erhalten, wie ich es in einer Komponente tun würde. Wenn ich jedoch das ActivatedRoute-Objekt in einen Service injiziere, enthält es eine leere params-Variable

Ich habe einen Plünderer erstellt, der das Verhalten reproduziert: Ссылка

Beachten Sie, dass die Absicht darin besteht, den Parameter im Service und nicht in der Komponente zu verwenden. Die Art, wie der Plunker eingerichtet wird, dient nur dazu, das Problem zu demonstrieren.

Komponente ( test wird abgerufen):

%Vor%

Service ( test ist nicht abgerufen):

%Vor%     
Steve Van Opstal 11.10.2016, 13:06
quelle

3 Antworten

9

Service ist hier ein Singleton, der zum Root-Injektor gehört und mit root ActivatedRoute Instanz .

Outlets erhalten ihren eigenen Injektor und eigene ActivatedRoute Instanz .

Die Lösung hier besteht darin, dass die Routing-Komponenten ihre eigenen Service -Instanzen haben:

%Vor%     
estus 11.10.2016, 14:53
quelle
6

Die Antwort von estus bietet eine gute Lösung, wenn mehrere Dienstinstanzen kein Problem darstellen.

Die folgende Lösung ruft einen Parameter direkt vom Router ab und ermöglicht dem Service, eine Instanz zu haben:

%Vor%

oder als beobachtbar:

%Vor%

Alternativ, wenn routerState nicht verfügbar ist:

%Vor%

Index ist die Position des Parameters in der URL.

    
Steve Van Opstal 12.10.2016 17:16
quelle
0

Ich kann in Ihrem von Ihnen bereitgestellten Plunker-Code keine routerLink -Direktive sehen.

Sie müssen eine routerLink -Direktive verwenden, um zu Ihrer Komponente zu navigieren, wo Sie den Parameter angeben, und nur Sie können ihn abrufen. Zum Beispiel:

%Vor%     
siva636 11.10.2016 14:17
quelle

Tags und Links