Angular 5全球组件及其服务

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (103)

通过Angular的文档,特别是样式指南,他们列出了共享模块和核心模块。根据文档,服务应放在共享模块的核心模块和组件中。我的问题是,如果我有一个组件,比如一个自定义文件上传组件,它还有一个相应的服务,该组件和服务应该驻留在哪里?由于服务与组件一起使用,因此将两者保持在一起似乎是有意义的,但是,这似乎不符合Angular标准。有人遇到过这个问题吗?

提问于
用户回答回答于
export class MyComponent implements OnInit {
ngOnInit()
{
this.socket=io("localhost");
this.socket.on('data' , (t)=>{

// parse data 
let data = JSON.parse(t);
//check if data is already exist in Map
let item = this.datas.get(data.Id.toString());
if(item){
// if exist update it
}
else{
// if not exist add it to map
}

});
}
}
用户回答回答于

查看提供商单件服务。以通常的方式:

  • 如果你想要单件服务,你必须在根模块中提供它,例如:router
  • 如果您需要每个组件实例的服务实例,那么您在组件定义中提供该服务,并且您可以将该服务实例传递给所有子组件: @Component({/ * ... * / providers:[UserService]}) 例如:如果每个上传组件都需要新的服务实例,则将服务定义为@Injectable类,导入上传组件源并在组件装饰器提供程序部分中注册为提供者。
用户回答回答于

根据Angular Style Guide,Angular并不真正建议提供服务SharedModule。原因是,无论哪个模块导入SharedModule,都将获得该共享服务的单独实例。在有状态服务的情况下,这是不可接受的。但在你的情况下,我不确定服务是否包含任何状态数据。所以我认为,将此组件和此服务添加到SharedModule本身应该是安全的。

再次,考虑到该服务不会有任何状态数据。

此外,Angular建议在其中提供服务,CoreModule因为它还建议CoreModule仅通过单个模块(通常是AppModule)进行可导入。这就是为什么它还建议创建一个Guard来防止重新导入CoreModule。

扫码关注云+社区

领取腾讯云代金券