如何在组件上下文之外的Angular 5中获取服务实例?

时间:2018-01-31 18:24:12

标签: javascript angular

我们正在使用Angular,但有这些差异:

  • 我们只使用绑定,HTTP和Material Design
  • 我们在ES5(用ES5编写的Angular 5)中使用它
  • 我们在软件生产线(SPL)的背景下使用它,因此我们不遵循其固定的结构。

我们定义了一个名为app的全局变量,我们希望以某种方式获取一些Angular的默认服务的实例,而不是将它们注入每个组件,我们希望重用该单个实例在整个申请过程中。

请不要就可测试性或类似事情提出建议。这种设计为我们创造了巨大的商业价值,我们在经济上享受工业方法。

然后我们定义了一个globalServices服务,该服务仅用作触发Angular注入机制的占位符,因此我们可以将这些单例实例设置为ng.http.Http

var globalServices = (function () {
    function globalServices(http) {
        console.log('constructor of globalServices');
        app.http = http;
    }
    globalServices = __decorate([
        ng.core.Injectable(),
        __metadata("design:paramtypes", [])
    ], globalServices);
    globalServices.parameters = [ng.http.Http];
    return globalServices;
}());

最后,我们在根模块的globalServices部分中使用了此bootstrap

var RootModule = (function () {
    function RootModule() {
    }
    RootModule = __decorate([
        ng.core.NgModule({
            declarations: [
                RootModuleClientLayout
            ],
            imports: [
                ng.platformBrowser.BrowserModule
            ],
            providers: [globalServices],
            exports: [],
            bootstrap: [RootModuleClientLayout]
        })
    ], RootModule);
    return RootModule;
}());

一切似乎都运转正常,我们没有错误。但是没有控制台日志,app.http未定义。通过设置断点,我们意识到globalServices的构造函数永远不会被调用。

这里有什么不妥?

0 个答案:

没有答案