AngularJs 2 – 创建多个服务实例
我创建了AngularJS 2服务,并将其用于2种不同的组件:App-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()); } } 代码here的实例 除了服务创建一次,当每个组件调用WriteToLog方法时,输出在每个组件中是相同的,但不是。 输出示例: App-Component可以输出以下内容:
子组件可以输出:
所以看起来服务的2个实例被创建(实例1的实例2) 我只想要一个实例;),当我在日志中追加字符串时,这必须出现在两个组件中。 感谢您的帮助
更新角度> = 2.0.0-RC.6
不要将服务添加到组件的提供者。 @NgModule({ providers: [...],... (由于延迟加载的模块引入自己的范围,因此不会加载的模块) @Component ({ selector : 'Sub-Component',// providers : [StateService] <== remove }) 角度≤2.0.0-RC.5 如果将其添加到组件上,则为每个组件实例获取一个新的服务实例。而是添加到 bootstrap(AppComponent,[StateService]); 您可以通过将其添加到单个组件来进行更细致的控制,然后此组件和所有子项都会注入相同的实例,但是其他应用程序可以与由bootstrap()创建的实例配合使用。这是角度DI中的“等级”。 也可以看看 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |