我应该在 Angular 的可重用组件中使用 EventEmitter 还是共享服务?
Should I use EventEmitter or shared Service in a reusable component in Angular?
在 Angular 中,我有一个可重复使用的 autocomplete
列表,我需要将选定的选项传递给调用此自定义组件的另一个组件。但是自定义组件并没有被直接调用,它们之间还有一个组件如下图:
Component A: --> Component B: --> Component C:
custom-autocomplete modal-component employee-component
现在我认为有2个选项:
1. 我可以通过共享服务将选定的值从组件 A 传递到任何组件。但是我不确定将服务依赖项注入可重用组件是否是个好主意。
2. 我可以通过 EventEmitter 将选定的值传递给组件 B,但我不知道将发出的事件从组件 B 传递到Component C. 我想我可以像通常通过 EventEmitter 传递接收到的事件和参数一样传递,但不确定这是否是个好主意。
那么,遇到这种情况应该怎么办?
在我看来,您应该使用 BehaviourSubject
类型 observable
的共享服务。因此,每当用户将 select 任何值形式 autocomplerte
时,您就可以将 selected 选项传递给您的 BehaviourSubject
observable
然后在您的另一个 component
你可以订阅 BehaviourSubject
.
如果您想在一个 component
中使用多个可重复使用的 autocomplete
,那么在传递每个 autcomplete's
selected 值时,您可以传递一个 属性命名为 type
,您将在其中发送 autocomplete
类型。
就像你有这样的功能
passDataToAnotherComponent(selectedOption: any, type: string){
this.dataService.passData({option : selectedOption, type: type})
}
因此,当您为城市调用上述函数时,您将像这样在模板中调用
<select (change)="passDataToAnotherComponent($event, 'city')">
<option>City 1</option>
<option>City 2</option>
</select>
<select (change)="passDataToAnotherComponent($event, 'department')">
<option>department 1</option>
<option>department 2</option>
</select>
然后在你的接收组件中这样做
ngOnInit(){
this.dataService.behaviourSubjectObservableVariable.subscribe(data => {
if(type === 'city){
// do somehting
}
if(type === 'department){
// do somehting
}
})
}
只是举个粗略的例子,让你明白。
在 Angular 中,我有一个可重复使用的 autocomplete
列表,我需要将选定的选项传递给调用此自定义组件的另一个组件。但是自定义组件并没有被直接调用,它们之间还有一个组件如下图:
Component A: --> Component B: --> Component C:
custom-autocomplete modal-component employee-component
现在我认为有2个选项:
1. 我可以通过共享服务将选定的值从组件 A 传递到任何组件。但是我不确定将服务依赖项注入可重用组件是否是个好主意。
2. 我可以通过 EventEmitter 将选定的值传递给组件 B,但我不知道将发出的事件从组件 B 传递到Component C. 我想我可以像通常通过 EventEmitter 传递接收到的事件和参数一样传递,但不确定这是否是个好主意。
那么,遇到这种情况应该怎么办?
在我看来,您应该使用 BehaviourSubject
类型 observable
的共享服务。因此,每当用户将 select 任何值形式 autocomplerte
时,您就可以将 selected 选项传递给您的 BehaviourSubject
observable
然后在您的另一个 component
你可以订阅 BehaviourSubject
.
如果您想在一个 component
中使用多个可重复使用的 autocomplete
,那么在传递每个 autcomplete's
selected 值时,您可以传递一个 属性命名为 type
,您将在其中发送 autocomplete
类型。
就像你有这样的功能
passDataToAnotherComponent(selectedOption: any, type: string){
this.dataService.passData({option : selectedOption, type: type})
}
因此,当您为城市调用上述函数时,您将像这样在模板中调用
<select (change)="passDataToAnotherComponent($event, 'city')">
<option>City 1</option>
<option>City 2</option>
</select>
<select (change)="passDataToAnotherComponent($event, 'department')">
<option>department 1</option>
<option>department 2</option>
</select>
然后在你的接收组件中这样做
ngOnInit(){
this.dataService.behaviourSubjectObservableVariable.subscribe(data => {
if(type === 'city){
// do somehting
}
if(type === 'department){
// do somehting
}
})
}
只是举个粗略的例子,让你明白。