在角度文档中,它解释了父和子如何通过使用的共享服务进行通信 可观察的RxJS主题。我们可以使用EventEmitter而不是RxJS 这个MissionService示例中的主题?如果我们可以在服务中使用EventEmitter,请使用EventEmitter帮助转换此示例。我是棱角分明的新人。
https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service
阅读这些相关帖子后我有点困惑:
答案 0 :(得分:1)
EventEmiter是RxJs主题的扩展,您可以将其用作Observable。
export declare class EventEmitter<T> extends Subject<T> {
__isAsync: boolean;
constructor(isAsync?: boolean);
emit(value?: T): void;
subscribe(generatorOrNext?: any, error?: any, complete?: any): any;
}
在父组件和子组件之间共享数据的最佳做法是使用@Input和@Output
当您需要使用服务进行共享时。您需要使用Subject或BehaviorSubject
服务示例
@Injectable()
export class MyService {
private data: BehaviorSubject<MyData> = new BehaviorSubject(null);
getData(): Observable<MyData> {
return this.data;
}
setData(d: MyData): void {
this.data.next(d);
}
}
在组件中使用
data: Observable<MyData>;
constructor(private myService: MyService) {}
ngOnInit() {
this.data = this.myService.getData();
}
在模板中使用
<div>{{data|async}}</div>
答案 1 :(得分:-1)
处理事件场景的方法有很多种。
EventEmitter是将子事件传递给父级的最常用方法。假设您创建了一个子组件并在那里单击了一个按钮,您可能希望在父组件中单击该事件:
<button (click)="clickEmitter.emit()">button</button>
<child-component (clickEmitter)="buttonClicked()"></child-component>
共享服务(Injectable)可用于存储多个组件的数据。
Subject和BehaviorSubject可用于在组件之间共享事件(有时通过共享服务)。例如:我使用了一个带有用户BehaviorSubject的authService来获取每个组件中的登录用户对象。
这些只是许多其他用例中的一些简单示例。