我目前开始使用Angular 2并且陷入了可能非常简单的事情:
我有一个共享服务chatMessageService.ts:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class ChatMessageService {
private messageList = new BehaviorSubject<string>("");
currentMessage = this.messageList.asObservable();
constructor() {
}
public addMessage(msg:string) {
this.messageList.next(msg) }
}
该服务由两个组件导入,一个调用它的addMessage函数将消息添加到Observable,然后我的chatComponent.ts看起来像这样(缩短了fpr的便利性):
import { Component } from '@angular/core';
import { Message } from './message';
import { ChatMessageService } from './chatMessage.service';
@Component({
selector: 'app-chat',
templateUrl: './chat.component.html',
styleUrls: ['./chat.component.css']
})
export class ChatComponent {
conversation: Message[] = [];
//.....
constructor(private chatMessageService: ChatMessageService) { }
addUserMessage(message) {
this.conversation.push({
content: message
});
}
ngOnInit() {
this.chatMessageService.currentMessage.subscribe(message => {this.addUserMessage(message);} )
}
}
我的危机出现在最后一个订阅部分。当我更换
{this.addUserMessage(message);}
带
{console.log(message)}
邮件打印得非常好。如果我手动调用addUserMessage() - 方法,它可以正常工作。但是当我在那里调用方法时,以消息作为参数,没有任何反应。该方法甚至不执行?
感谢您的见解!
答案 0 :(得分:1)
看起来你需要在服务中加入一些缓冲 而不是BehaviorSubject,请尝试
private messageList = new ReplaySubject<string>(10);
参见工作示例:Plunker