我在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数组中注册服务,我们仍然需要至少请求一次创建该服务的单例实例吗?
答案 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){}