外部模块的服务实例未创建

时间:2018-05-16 08:12:41

标签: angular

我在ExternalModule导入了一个外部模块(AppModule)。我的外部模块中的服务的构造函数未被调用。下面是我的两个模块和服务的代码,

// AppModule
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { ExternalModule } from './external/external.module';


@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    ExternalModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

// ExternalModule
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NewService } from './new.service';

@NgModule({
  imports: [
    CommonModule
  ],
  providers: [
    NewService
  ],
  declarations: []
})
export class ExternalModule { }

// NewService
import { Injectable } from "@angular/core";

@Injectable()
export class NewService {
    constructor() {
       console.log('New service constructed');
    }
}

我希望在我的应用加载时调用NewService的构造函数。找到以下示例stackblitz

只是通过在模块的提供者上注册实例来创建实例吗?

根据angular v5文​​档,

  

providers数组告诉Angular创建一个HeroService的单个共享实例,并注入任何要求它的类。

这是否意味着即使我们在providers数组中注册服务,我们仍然需要至少请求一次创建该服务的单例实例吗?

2 个答案:

答案 0 :(得分:2)

写这行

  providers: [
    NewService
  ],

您实际上正在注册您的服务,这并不意味着它会创建服务实例。

当您在其他服务,组件或指令或管道中请求服务实例时,它将创建实例。

所以,如果你想创建服务实例,只需在你的应用程序组件中这样做。

 //app.component.ts
 constructor(
    private newservice: NewService )

当您在Approot级别注册服务时,只会创建一个服务实例,并且该实例将被提供给请求它的应用程序中的所有组件。

答案 1 :(得分:0)

NewService导入您的app.component.ts

import { NewService} from './external/new.service';

现在在其中添加构造函数,如下所示:

constructor(private _newService:NewService){}