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