2016-03-18 7 views
2

habe ich einen Dienst wie folgt aus:Verwenden RouteParams in einem Dienst in Angular 2

import {Injectable} from 'angular2/core'; 
import {Router, RouteParams} from 'angular2/router'; 

@Injectable() 
export class QService { 
    /* A service to handle a query (q) in the search string. 
    */ 
    constructor(
     private _router:Router, 
     routeParams:RouteParams 
    ) { 
    /* Set this._q from the search string. 
    */ 
    this._q = routeParams.get('q'); 
    } 

    private _q:string 
    get q():string { 
    return this._q; 
    } 
    set q(q:string) { 
    this._q = q; 
    // TODO Add q back to the search string. 
    } 
} 

Leider, egal wie ich diesen Service zu nutzen, bekomme ich einen Fehler nach dem Vorbild der No provider for RouteParams. Ich bin ratlos. Gibt es eine empfohlene oder einfache Methode, die ich verpasst habe?

+0

Haben Sie hinzufügen 'ROUTER_PROVIDERS' zu' Bootstrap (AppComponent, [ROUTER_PROVIDERS]) '? –

+0

Dieser Kommentar ist länger als nötig wegen der etwas seltsamen Regeln von Stack Overflow. Ja, mache ich. – astex

+0

Können Sie versuchen: QService.params = [[Router], [RouteParams]] am Ende Ihres Codes? Außerdem füge ich Injektionen hinzu: [RouteParams], aber das ist in meiner @Component. Vielleicht können Sie dies auch versuchen –

Antwort

1

Ich denke, dass Sie diesen Dienst auf der Ebene einer Komponente angeben müssen (in Routing beteiligt ist) in ihrem Anbieter zuschreiben und nicht, wenn die Anwendung Bootstrapping:

@Component({ 
    (...) 
    providers: [ QService] 
}) 
export class... 

als eine Angelegenheit der Tatsache RouteParams gilt nur im Kontext einer Komponente und nicht global zur Anwendung. Daher hat der Anwendungsinjektor keine Kenntnis von diesem Anbieter, da er nur in einem Kind-Injektor vorhanden ist (einer Komponente).

Dies ist mit Abhängigkeitsinjektion und hierarchischen Injektoren verknüpft. Sehen Sie diese Frage für weitere Informationen:

+0

Ich verwende den Dienst als Anbieter wie angegeben. Wenn ich etwas entferne, das mit Routing zu tun hat, funktioniert der Dienst wie erwartet. Es scheint jedoch eine schreckliche Isolierung von Bedenken zu sein, wenn eine Komponente den Dienst umschließt und Änderungen an der Suchzeichenfolge behandelt. Zumal ich auch möchte, dass der Suchstring aktualisiert wird, wenn sich q ändert. Ich würde mich freuen, die "richtige" Art zu sehen, die eckig dafür vorgeschrieben hat. – astex

Verwandte Themen