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

2022-10-16,,,

假如我们有一个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() 注册单一实例服务问题,希望对大家有所帮助

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

下载本文的Word格式文档,以方便收藏与打印。