NodeJS,Angular 2 |接下来在Observable上执行方法

时间:2017-11-05 01:21:13

标签: javascript node.js angular

我目前开始使用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() - 方法,它可以正常工作。但是当我在那里调用方法时,以消息作为参数,没有任何反应。该方法甚至不执行?

感谢您的见解!

1 个答案:

答案 0 :(得分:1)

看起来你需要在服务中加入一些缓冲 而不是BehaviorSubject,请尝试

private messageList = new ReplaySubject<string>(10);

参见工作示例:Plunker