AngularJs 2 - mehrere Instanzen des Dienstes erstellt

Ich habe den AngularJS 2-Dienst erstellt und verwende ihn in 2 verschiedenen Komponenten: App-Component & Sub-Component. Jede Ausgabeeigenschaft 'log' (eine Zeichenfolge) meines Dienstes.

StateService-Klasse:

@Injectable ()
class StateService {

    public log : string;
    static count : number = 0;

    constructor () {
        this.log = '';
        StateService.count++;
        this.writeToLog ('CREATED '+StateService.count+' at ' + new Date().toString()),;
    }

    public writeToLog (text : string) : void {
        this.log += text + '\n';
    }
}  

Component:

@Component ({
    selector : 'Sub-Component',
    template : `<hr>
            This is the Sub-Component !
            <BR>
            StateService Log : 
            <pre>{{ _stateService.log }}</pre>
            <button (click)="WriteToLog ()">Write to log</button>
            `,
    providers : [StateService]
})

export class SubComponent {
    constructor (private _stateService : StateService) {
    }

    public WriteToLog () : void {
        this._stateService.writeToLog ('From Sub-Component - This is '+new Date().toString());
    }
}

Live Beispiel für CodeHie

Ich nehme an, dass der Dienst einmal erstellt wird und wenn jede Komponente die WriteToLog-Methode aufruft, ist die Ausgabe in jeder Komponente dieselbe, aber nicht.

Beispiel der Ausgabe:

Die App-Komponente kann dies ausgeben:

Instance 1 - Erstellt am Do., 21. Januar 2016, 11: 43: 51 Uhr

From App-Component - Dies ist Do 21 Jan 2016 11: 43: 54

From App-Component - Dies ist Do 21 Jan 2016 11: 43: 55

und die Unterkomponente kann dies ausgeben:

Instance 2 - Erstellt am Do., 21. Januar 2016, 11: 43: 51 Uhr

From Sub-Component - Dies ist Do 21 Jan 2016 11: 43: 57

From Sub-Component - Dies ist Do 21 Jan 2016 11: 43: 58

So scheint es, dass 2 Instanzen des Dienstes erstellt werden (Instanz 1 + Instanz 2)

Ich möchte nur eine Instanz;) und wenn ich einen String im Protokoll anhänge, muss dieser in beiden Komponenten erscheinen.

Danke für deine Hilf

Antworten auf die Frage(4)

Ihre Antwort auf die Frage