私は AngularJS 2 サービスを作成し、それを 2 つの異なるコンポーネント (App-Component と Sub-Component) で使用しています。私のサービスの各出力プロパティ「ログ」(文字列)。
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-Component はこれを出力できます:
インスタンス 1 - 2016 年 1 月 21 日木曜日 11:43:51 に作成
App-Component から - これは 2016 年 1 月 21 日木曜日 11:43:54 です
App-Component から - これは 2016 年 1 月 21 日木曜日 11:43:55 です
サブコンポーネントはこれを出力できます:
インスタンス 2 - 2016 年 1 月 21 日木曜日 11:43:51 に作成
サブコンポーネントから - これは 2016 年 1 月 21 日木曜日 11:43:57 です
サブコンポーネントから - これは 2016 年 1 月 21 日木曜日 11:43:58 です
そのため、サービスの 2 つのインスタンスが作成されたように見えます (インスタンス 1 + インスタンス 2)。
必要なインスタンスは 1 つだけです ;) ログに文字列を追加する場合、これは両方のコンポーネントに表示される必要があります。
ご協力ありがとうございました