Я интегрировал SignalR в свой проект Angular (v8), используя следующий подход на Начало работы с SignalR с использованием ASP.NET Core And Angular .В этом примере EventEmitter используется для передачи полученных данных с сервера, но я не уверен, существует ли лучший подход для передачи данных другим компонентам, например, SubjectBehaviour и т. Д. Я использовал EventEmitter для передачи данных.от дочернего к родительскому компоненту и использовал SubjectBehaviour для передачи данных между одноуровневыми компонентами ранее.Мне нужно использовать лучший подход для этого сценария.С другой стороны, я не уверен, что использование EventEmitter здесь отличается от использования для передачи данных от дочернего к родительскому компоненту (я использовал раньше на Angular 5: обмен данными между компонентами одного уровня с использованием EventEmitter ).Не могли бы вы также уточнить меня об этом?
service.ts:
@Injectable()
export class SignalRService {
messageReceived = new EventEmitter<ChatMessage>();
connectionEstablished = new EventEmitter<Boolean>();
constructor() {
this.registerOnServerEvents();
this.startConnection();
}
private startConnection(): void {
this._hubConnection
.start()
.then(() => {
this.connectionEstablished.emit(true);
})
}
private registerOnServerEvents(): void {
this._hubConnection.on('ReceiveMessage', (data: any) => {
this.messageReceived.emit(data);
});
}
}
component.ts:
export class ClockComponent {
constructor(private _signalRService: SignalRService, private _ngZone: NgZone) {
this.subscribeToEvents();
}
private subscribeToEvents(): void {
this._signalRService.connectionEstablished.subscribe(() => {
this.canSendMessage = true;
});
this._signalRService.messageReceived.subscribe((message: GetClockTime) => {
this._ngZone.run(() => {
this.allMessages = message;
});
});
}
}