簡體   English   中英

在回調函數中可觀察到-角度2

[英]Observable in a callback function - angular 2

我正在嘗試在服務類中實現回調函數,該服務類必須將數據返回給組件類。

ChatComponent.ts

export class ChatComponent implements OnInit {

  constructor( public _chatService : ChatService) {
    _chatService.joinChat()
  }

  OnInit(){

  }

 // I need to get the `msg` object from the ChatService class
  didReceiveMessage(msg){
console.log(“Message received from chat service class”+msg);
  } 

}

聊天服務

import { Component, Input } from '@angular/core';
import { Injectable }     from '@angular/core';


@Injectable()
export class ChatService {
   public chatObj : SomeChatObject;

    constructor() { }

    joinChat(){
    //Join chat related functionality
    this.chatObj.addHandler(this.onMessageReceivedHandler, null, "message");
    }

     onMessageReceivedHandler = (message) => {
    //Send `message` back to `didReceiveMessage ` method in ChatComponent.ts
     return true;
     }
}

我已經看到了使用Http Observable回調的示例。 在這里,我使用addHandler顯式添加了回調。 我將在“ onMessageReceivedHandler”方法中獲取消息對象。 但是我需要將其傳遞給ChatComponent。 如何傳遞數據。

我認為Carsten是對的,您可以使用主題和行為主題來獲得您的按摩

在服務檔案中

message:Subject<string> = new Subject();

    broadcastMessage(text:string) {
        this.message.next(text);
    }

在組件文件中,您可以訂閱消息主題

this. _chatService.message.subscribe((msg) => {
  console.log(“Message received from chat service class”+msg);
});

您可以為此使用主題。

在ChatService中:

subscribers: Subject[] = [];

然后在joinChat中

joinChat(userSubject: Subject) {
  this.subscribers.push(userSubject);
}

然后在messageReceivedHandler中:

for (let i = 0; i < this.subscribers.length(); i++) {
  this.subscribers[i].next("Hello");
}

ChatComponent:

constructor( public _chatService : ChatService) {
  let subject = new Subject();
  subject.subscribe(
    msg => console.log(msg);
  );

  _chatService.joinChat(subject);
}

請注意:我是從腦海寫的,所以不能保證代碼可以編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM