Angular 如何将主题变量转换为可观察变量

Angular 如何将主题变量转换为可观察变量,angular,typescript,rxjs,Angular,Typescript,Rxjs,让我解释一下。以下是我的HTML,用于显示我的邮件,如下所示: <message *ngFor="let message of thread.messages | async" [message]="message"> </message> 我绝望了,你知道我的错误在哪里吗?为什么我可以查看最后一条消息,而不是所有消息?在这种情况下,请将订阅服务器中的内容视为一种状态。在您的代码中,您将发出一条封装在数组中的消息,[newMessage]。订阅者以流的形

让我解释一下。以下是我的HTML,用于显示我的邮件,如下所示:

<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);
}