AngularJs 2 - создано несколько экземпляров сервиса
Я создал сервис AngularJS 2 и использую его в двух разных компонентах: App-Component и Sub-Component. Каждое выходное свойство 'log' (строка) моего сервиса.
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';
}
}
Составная часть :
@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());
}
}
Живой пример кодаВот
Я за исключением того, что служба создается один раз, и когда каждый компонент вызывает метод WriteToLog, выходные данные одинаковы для каждого компонента, но это не так.
Пример вывода:
Компонент App может вывести это:
Экземпляр 1 - Создано Чт 21 января 2016 11:43:51
Из App-Component - Это Чт 21 января 2016 11:43:54
Из App-Component - Это Чт 21 января 2016 11:43:55
и субкомпонент может вывести это:
Экземпляр 2 - Создано Чт 21 января 2016 11:43:51
Из подкомпонента - Это четверг, 21 января 2016 г. 11:43:57
Из подкомпонента - Это четверг, 21 января 2016 г. 11:43:58
Таким образом, создается впечатление, что 2 экземпляра службы созданы (экземпляр 1 + экземпляр 2)
Я хочу только один экземпляр;) и когда я добавляю строку в журнал, это должно появиться в обоих компонентах.
Спасибо за помощь