Ho creato il servizio AngularJS 2 e lo utilizzo in 2 componenti diversi: Componente App & Componente secondaria. Ogni proprietà di output 'log' (una stringa) del mio servizio.AngularJs 2: più istanze di servizio create
classe StateService:
@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';
}
}
Componente:
@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());
}
}
vivo esempio di codice here
ho tranne che il servizio viene creata una sola volta e quando ogni chiamata di metodo WriteToLog componente , l'output è lo stesso in ogni componente ent, ma non lo è.
Esempio di emissione:
L'App-componente in grado di produrre questo:
Istanza 1 - Creato a gio gen 21 2016 11:43:51
Da App-Componente - Questo è Gio 21 Gen 2016 11:43:54
Da App-Componente - Questo è Gio 21 Gen 2016 11:43:55
e del Sub-componente può produrre questo:
grado 2 - Creato a gio gen 21 2016 11:43:51
Dal sub-componenti - Questo è Gio 21 Gen 2016 11 : 43: 57
Dal sub-Component - Questo è gio gen 21 2016 11:43:58
Così sembra che si crea 2 un'istanza del servizio (esempio 1 + esempio 2)
Voglio solo un'istanza;) e quando aggiungo stringa nel registro, questo deve apparire in entrambi i componenti.
Grazie per il vostro aiuto
FYI, Angular 2 non è chiamato AngularJS 2. – technophyle