Angular 如何将主题变量转换为可观察变量
让我解释一下。以下是我的HTML,用于显示我的邮件,如下所示:Angular 如何将主题变量转换为可观察变量,angular,typescript,rxjs,Angular,Typescript,Rxjs,让我解释一下。以下是我的HTML,用于显示我的邮件,如下所示: <message *ngFor="let message of thread.messages | async" [message]="message"> </message> 我绝望了,你知道我的错误在哪里吗?为什么我可以查看最后一条消息,而不是所有消息?在这种情况下,请将订阅服务器中的内容视为一种状态。在您的代码中,您将发出一条封装在数组中的消息,[newMessage]。订阅者以流的形
<message
*ngFor="let message of thread.messages | async"
[message]="message">
</message>
我绝望了,你知道我的错误在哪里吗?为什么我可以查看最后一条消息,而不是所有消息?在这种情况下,请将订阅服务器中的内容视为一种状态。在您的代码中,您将发出一条封装在数组中的消息,
[newMessage]
。订阅者以流的形式获取这些发出的值。如果发出整个状态,订阅者就可以访问整个消息数组
同时使用主体和可观察对象似乎是不对的。我没有试过,但如果你做类似的事情:
export class Thread {
id: string;
messages: Subject<Message[]> = new Subject<Message[]>();
}
messages: Message[] = new Message[];
addNewMessage(objMessage: any) : void {
const newMessage = new Message(objMessage);
messages.push(newMessage);
thread.messages.next(messages);
}
导出类线程{
id:字符串;
消息:主题=新主题();
}
消息:消息[]=新消息[];
addNewMessage(objMessage:any):无效{
const newMessage=新消息(objMessage);
messages.push(newMessage);
thread.messages.next(消息);
}
或者更好的方法是查看
ReplaySubject
或BehaviorSubject
,它们也可以用来获取以前的消息。返回subjectMessages.asObservable()@阿伦96你什么意思?您希望我在哪里返回主题消息。asObservable()?非常感谢!!它的工作原理是:messages.push(newMessage);thread.messages=可观察的(thread.arrayMessages)代码>
subjectMessages: Subject<Message[]> = new Subject<Message[]>();
addNewMessage(objMessage: any) : void {
const newMessage = new Message(objMessage);
this.subjectMessages.next([newMessage]);
thread.messages = this.subjectMessages.asObservable();
}
thread.messages.subscribe((message: Message[]) => {
[thread.lastMessage] = message;
});
export class Thread {
id: string;
messages: Subject<Message[]> = new Subject<Message[]>();
}
messages: Message[] = new Message[];
addNewMessage(objMessage: any) : void {
const newMessage = new Message(objMessage);
messages.push(newMessage);
thread.messages.next(messages);
}