Angular: испускание данных после извлечения через SignalR - PullRequest
0 голосов
/ 11 июля 2019

Я интегрировал 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;  
          });  
      });  
  }  
}  
...