Angular 角度相同的服务-多个实例?还是在每次调用中传递参数?

Angular 角度相同的服务-多个实例?还是在每次调用中传递参数?,angular,Angular,我正在Angular中构建一个组件,通过RESTAPI控制和监视一个继电器。有几个相同的继电器,每个继电器都有自己的名称和IP地址 我是一个棱角分明的傻瓜,不太理解“providedIn:‘root’vs‘any’”范式以及服务是如何“注入”的。我是否应该创建一个服务(由组件的所有实例共享),并在每次调用指定的API时传入API端点?还是应该为每个中继创建一个单独的服务实例 如果答案是前者,那么如果服务需要保持到每个中继的持久TCP连接,而不是无状态HTTP连接,这会有所不同吗 我是不是看错了“

我正在Angular中构建一个组件,通过RESTAPI控制和监视一个继电器。有几个相同的继电器,每个继电器都有自己的名称和IP地址

我是一个棱角分明的傻瓜,不太理解“providedIn:‘root’vs‘any’”范式以及服务是如何“注入”的。我是否应该创建一个服务(由组件的所有实例共享),并在每次调用指定的API时传入API端点?还是应该为每个中继创建一个单独的服务实例

如果答案是前者,那么如果服务需要保持到每个中继的持久TCP连接,而不是无状态HTTP连接,这会有所不同吗


我是不是看错了“providedIn:‘any’”这句话?我一直在试图弄清楚如何将参数(例如API端点)传递到服务的构造函数中,这似乎是一个出人意料的罕见信息。我缺少什么?

您不能从组件向服务的构造函数传递参数,因为服务必须首先构造并提供给组件。这只是一种有棱角的方式。相反,这个习惯用法似乎是通过将服务包含在控件元数据的providers数组中(而不是应用程序的providers数组中)来确保服务是组件的本地服务

查看“沙箱”与“单例”服务的讨论

// in some.component.ts ...
@Component({
  selector: 'some-component',
  template: `<div>[my control here]</div>`,
  providers: [ SomeService ]  //provide this service locally!
})
export class SomeComponent implements OnInit {
  @Input() url:string = 'http://blah.com';

  constructor(private myService:SomeService) { } //SomeService gets injected here

  ngOnInit(): void {
    this.myService.remoteEndpoint = this.url;  //set the url in the service here!
  }
}
// in some.service.ts ...
@Injectable({
  providedIn: 'any'
})
export class SomeService {
  remoteEndpoint:string = '';
  constructor() {  }
}