Angular 无法通过HttpInterceptor通过服务推送数据

Angular 无法通过HttpInterceptor通过服务推送数据,angular,angular-http-interceptors,angular-httpclient,Angular,Angular Http Interceptors,Angular Httpclient,我创建了一个MessageService,我将数据推入其中,然后由我的app.main将这些消息显示给用户。当我在组件中使用此服务时,它工作正常。我想做的是将其移动到HttpInterceptor级别,该级别将监视服务器消息的所有HttpResponse,并将它们推送到服务中供用户显示 这是我的服务: @Injectable() export class MessageService { private successMessageList = new Subject<string&g

我创建了一个
MessageService
,我将数据推入其中,然后由我的
app.main
将这些消息显示给用户。当我在组件中使用此服务时,它工作正常。我想做的是将其移动到
HttpInterceptor
级别,该级别将监视服务器消息的所有
HttpResponse
,并将它们推送到服务中供用户显示

这是我的服务:

@Injectable()
export class MessageService {
  private successMessageList = new Subject<string>();
  successMessages$ = this.successMessageList.asObservable();

  constructor() { }

  addSuccessMsg(msg: string) {
    this.setMsgs(this.successMessageList, msg);
  }

  private setMsgs(privMsgArray: Subject<string>, newMsgs: any) {
    let messages = [];
    messages.push(newMsgs);

    messages.forEach(message => privMsgArray.next(message));
    console.log(this.successMessageList);
  }
}    
通过一些控制台语句,我可以看到数据正确地进入了
messageService.setMsgs(…)
private方法,但它从未像我通过组件发送消息时那样到达我的
app.main
。没有错误消息或任何东西,它就是不工作

我注意到的一件事是在
MessageService.setMsgs(..)
中,我为
successessagelist
添加了一个控制台语句。当我通过一个组件添加一条消息时,我得到的输出如下所示(注意
observators:Array(1)
vs
observators:Array(0)

但是当我通过
HttpInterceptor
添加消息时,我得到了这个消息

Subject {_isScalar: false, observers: Array(0), closed: false, isStopped: false, hasError: false, …}
如果您对正在发生的事情有任何想法,我们将不胜感激


我正在使用Angular 5

此问题是100%的用户错误。在我的
app.main
组件中,我在
@component
中将
messageService
声明为
提供者
,因此该服务不像我期望的那样是共享单例。在我删除后,一切正常。

我认为您需要推送到
successMessages
,这是一个主题,它将为组件发出值,当您在服务本地执行时
export class AppComponent implements OnInit {
  successMessages = [];

  constructor(private messageService: MessageService) { }

  ngOnInit(): void {
    this.messageService.successMessages$.subscribe(
      message => {
        console.log(message);
        setTimeout(() => {
          this.successMessages.push(message);
        });
      });
  }
}
Subject {_isScalar: false, observers: Array(1), closed: false, isStopped: false, hasError: false, …}
Subject {_isScalar: false, observers: Array(0), closed: false, isStopped: false, hasError: false, …}