【问题标题】:Angular 2 RC 5 global providerAngular 2 RC 5 全球供应商
【发布时间】:2016-09-06 12:31:43
【问题描述】:

我怎样才能拥有一个只初始化一次的全局提供程序。 所以我有以下提供者

@Injectable()
export class ApiRequest {

    http: Http;
    constructor(@Inject(Http) http) {
         console.log('Test');
    }
}

然后是共享模块

@NgModule({
    imports: [BrowserModule,
        HttpModule],
    declarations: [ControlMessage, InfiniteScroll],
    entryComponents: [ControlMessage],
    providers: [ApiRequest],
    exports: [ControlMessage, InfiniteScroll],
})

导出类 SharedModule {

static forRoot(): ModuleWithProviders {
    return {
        ngModule: SharedModule,
        providers: [ApiRequest]
    };
}

代码正在运行,这里的问题是每次我更改路由时都会初始化 ApiRequest 构造函数,因此每个页面都会更改。如何使 ApiRequest 提供程序在整个应用程序中只初始化一次?

【问题讨论】:

  • 听起来模块是延迟加载的。这种情况下需要实现forRoot()angular.io/docs/ts/latest/guide/ngmodule.html,angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html
  • @GünterZöchbauer 也尝试过。同样的问题。编辑问题以使用 forRoot
  • 我想我看到了这样一个问题。这应该在 master 中修复并包含在下一个版本中。
  • 所以我无能为力吗?我还看到,每次我更改页面时,路由器的主要组件也会执行,尽管我正在更改它的子级。
  • 我猜不是。抱歉,不知道其他问题。

标签: angular angular2-routing angular2-providers


【解决方案1】:

所以这里的问题是我在子模块中声明了提供者。即使很难,我只在子模块中使用提供程序,它仍然在每次注入时初始化。所以我不得不在主模块中声明它,它按预期工作。

【讨论】:

  • 这应该只是模块延迟加载时的问题。您可能想要使用stackoverflow.com/questions/39447443/… 中提到的核心模块
  • 试过了,同样的问题。除非我在主模块中声明它,否则无论模块是否延迟加载,我都会得到相同的结果。
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2016-09-16
  • 2016-10-24
  • 2016-12-22
  • 2016-12-17
相关资源
最近更新 更多