angular 12 中单例 Service 的使用

Fork Me On Github

angular 12 singleton service

angular 12 中单例 Service 的使用

service 写法

ts
        
import { Injectable } from '@angular/core';

@Injectable({
    providedIn: 'root',
})
export class SearchService {

}
12345678

providedIn: 'root' 表明当前 service 为全局有效的单例模式

注册 service

必须在 AppModule 注册,或者 在任意一个 module 中注册。

但是需要注意,这个 module 只能导入一次,

例如:有一个 module ThemeModule 为公共核心组件,很多其他 module 都会依赖她,

导致很多地方都使用了

ts
     
imports: [
    ...,
    ThemeModule,
    ...
]
12345

进行导入

而 单例 service SearchService 是注册在 ThemeModule 中的,

这样就会导致单例不生效,每一个 SearchService 都不同,

这是可以给 ThemeModule 增加一个方法 forRoot()

ts
          
export class ThemeModule {
    static forRoot(): ModuleWithProviders<ThemeModule> {
        return {
            ngModule: ThemeModule,
            providers: [
                SearchService,
            ]
        };
    }
}
12345678910

SearchService 仅注册到 forRoot() 中。

然后在 AppModule 中导入 ThemeModule

ts
          
@NgModule({
    ...
    imports: [
        ...,
        ThemeModule.forRoot(),
        ...
    ],
    ...
})
export class AppModule 
12345678910

这样就能生效

点击查看全文
标签: angular
0 223 0
在 angular 项目中实现对页面的访问控制
按下回车键,焦点移动到下一个表单或提交表单
使用ng-template 显示tree结构数据
使用 ViewContainerRef.createComponent 替代 ComponentFactoryResolver
angular 12使用 KaTex 显示 AsciiMath 格式的公式