在回调函数中可观察 - angular 2
Observable in a callback function - angular 2
我正在尝试在服务 class 中实现回调函数,它必须 return 将数据返回到组件 class。
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);
}
}
ChatService.ts
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。如何传递数据。
您可以为此使用主题。
在聊天服务中:
subscribers: Subject[] = [];
然后加入聊天
joinChat(userSubject: Subject) {
this.subscribers.push(userSubject);
}
然后在 messageReceivedHandler 中:
for (let i = 0; i < this.subscribers.length(); i++) {
this.subscribers[i].next("Hello");
}
聊天组件:
constructor( public _chatService : ChatService) {
let subject = new Subject();
subject.subscribe(
msg => console.log(msg);
);
_chatService.joinChat(subject);
}
请注意:我是在脑海中写的,所以不能保证代码可以编译..
我认为 Carsten 是对的,你可以使用 subject 和 Behavior Subject 来获得你收到的按摩
在服务文件中
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);
});
我正在尝试在服务 class 中实现回调函数,它必须 return 将数据返回到组件 class。
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);
}
}
ChatService.ts
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。如何传递数据。
您可以为此使用主题。
在聊天服务中:
subscribers: Subject[] = [];
然后加入聊天
joinChat(userSubject: Subject) {
this.subscribers.push(userSubject);
}
然后在 messageReceivedHandler 中:
for (let i = 0; i < this.subscribers.length(); i++) {
this.subscribers[i].next("Hello");
}
聊天组件:
constructor( public _chatService : ChatService) {
let subject = new Subject();
subject.subscribe(
msg => console.log(msg);
);
_chatService.joinChat(subject);
}
请注意:我是在脑海中写的,所以不能保证代码可以编译..
我认为 Carsten 是对的,你可以使用 subject 和 Behavior Subject 来获得你收到的按摩
在服务文件中
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);
});