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。
是否仅通过在模块的提供者上注册来创建实例?
根据角度 v5 文档,
providers 数组告诉 Angular 创建一个单一的、共享的实例
HeroService
并注入到任何需要它的类中。
这是否意味着即使我们在 providers 数组中注册了服务,我们是否仍然需要至少请求一次才能创建该服务的单例实例?
解决方案
通过写这行
providers: [
NewService
],
您实际上是在注册您的服务,这并不意味着它会创建服务实例。
当您在其他服务、组件或指令或管道中请求服务实例时,它将创建实例。
因此,如果您想创建服务实例,只需在您的应用程序组件中执行此操作即可。
//app.component.ts
constructor(
private newservice: NewService )
当您在 approot 级别注册服务时,只会创建服务实例,并将该实例提供给应用程序中请求它的所有组件。
推荐阅读
- postgresql - 从随机排序的列中按顺序提取数字
- python - 不知道如何解决错误:AttributeError: 'str' object has no attribute 'set'
- python - 如何使用列表/字典理解在 Python 中获取唯一值
- npm - Gulp sass 不编译带有 #{$i} 标签的循环
- javascript - 无法删除按钮上动态添加的类
- php - 如何上传文件并加密该文件并保存在数据库中
- python - 在 Python 中执行方法/函数时没有输出
- reactjs - 将泛型传递给封装在 HOC 中的组件
- node.js - 独占访问 mapLimit 中的变量返回
- signalr - 使用信号器制作推送通知服务