欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Angular6使用forRoot() 注册单一实例服务问题

程序员文章站 2022-03-20 18:29:32
假如我们有一个sharemodule来存放公用的组件(component)、指令(directive)、管道(pipe)、服务(service),为避免各个子模块引用sha...

假如我们有一个sharemodule来存放公用的组件(component)、指令(directive)、管道(pipe)、服务(service),为避免各个子模块引用sharemodule时造成app中有多个一样的单一实例服务的问题。我们可以在sharemodule中建立同意的app层级的服务。

sharemodule
import { ngmodule, modulewithproviders } from '@angular/core';
@ngmodule({
  imports: [
    httpmodule,
    jsonpmodule,
    ...
  ],
  declarations: [
    showitdirective,
    ...
  ],
  exports: [
    showitdirective,
    ...
  ]
})
export class sharemodule{
  // 给sharemodule添加forroot
  static forroot(): modulewithproviders {
    return {
      ngmodule: sharemodule,
      providers: [
        messageservice,
        notifyservice,
        ... any service
      ],
    };
  }
}
appmodule
@ngmodule({
 declarations: [
  appcomponent,
 ],
 imports: [
  // 使用
  sharemodule.forroot(),
 ],
 providers: [
  
 ],
 bootstrap: [appcomponent]
})
export class appmodule { }

这样sharemodule中每一个service都只在app中注册了一个实例,也避免了每次使用service都要provider的问题。

error nullinjectorerror: staticinjectorerror(appmodule)[surveycomponent -> permissioncheckerservice]:
nullinjectorerror: no provider for permissioncheckerservice!

总结

以上所述是小编给大家介绍的angular6使用forroot() 注册单一实例服务问题,希望对大家有所帮助