angular 如何注册全局服务 和 怎么在组件调用全局服务?

SmartCoder
  • 904

angular 如何注册全局服务 和 怎么在组件调用全局服务?

回复
阅读 2.3k
1 个回答

服务都是全局的,同一个provider注入的服务默认是单例。定义服务使用@Injectable注解。

@Injectable()
export class XXXX{

yyy(){}

}

注入服务之前,必须要定义providers,定义的地方是各个模块文件(yyy.moudle.ts文件),angular6之后可以在component定义providers,但angular5不行。
模块文件中定义:
@NgModule({

imports: [
    SharedModule
],
providers:[XXXX],
declarations: [
    ...COMPONENTS,
    ...COMPONENTS_NOROUNT
],
entryComponents: COMPONENTS_NOROUNT

})

如果你想在一个地方定义provider,然后所有component都可以使用,则可以把provider加入到根模块srcappapp.module.ts 中。因为一个组件先在自己的模块中找provider,如果找不到,则找父组件的模块的provider,如果还是找不到,会继续找父组件的父级组件,这样层层上找,如果你定义在根,那么所有组件最终都可以找到provider。

注入服务也很简单,在组件的constructor的参数中加上服务就可以(一定要加上private或者public/protected)。
constructor(private xService:XXXX){

this.xService.yyy();

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏