Javascript Angular 6:向服务事件订阅组件

Javascript Angular 6:向服务事件订阅组件,javascript,angular,typescript2.0,Javascript,Angular,Typescript2.0,我需要根据服务器响应状态更改组件中的消息txt。问题是我不知道如何在组件ts文件中侦听该事件并调用其中声明的函数。也许有更好的方法来显示这样的通知 处理错误ts: catchErrors(resp:any){ 如果(各自状态==200){ 该信息='3а2а3а3а3а3а3а3а3а3а3а3а3а3а3а3; } 否则如果(响应状态==400){ 此信息='Бызззззззззззззззб107; } 否则如果(响应状态==404){ 该信息='Сааааааааааааааааааа

我需要根据服务器响应状态更改组件中的消息txt。问题是我不知道如何在组件ts文件中侦听该事件并调用其中声明的函数。也许有更好的方法来显示这样的通知

处理错误ts:

catchErrors(resp:any){
如果(各自状态==200){
该信息='3а2а3а3а3а3а3а3а3а3а3а3а3а3а3а3;
}
否则如果(响应状态==400){
此信息='Бызззззззззззззззб107;
}
否则如果(响应状态==404){
该信息='Сааааааааааааааааааа1072;
}
否则如果(各自状态==500){
此消息='Сбббббббб.бббббб:状态;
}
返回this.messageService.showMessage(this.message);

}
您可以使用主题完成此工作:

message.service.ts
中声明一个
主题

messageSubject : Subject<string> = new Subject<string>();
showMessage(message) {
    this.messageSubject.next(message);
 }
在您的
组件
中的
ngOnInit()
中,按如下方式订阅
消息主题

this.messageService.messageSubject.subscribe((message : string) => {

//your message will be available here as ``message`` and you can implement your notification logic using this message 
}) 

您可以使用主题完成此工作:

message.service.ts
中声明一个
主题

messageSubject : Subject<string> = new Subject<string>();
showMessage(message) {
    this.messageSubject.next(message);
 }
在您的
组件
中的
ngOnInit()
中,按如下方式订阅
消息主题

this.messageService.messageSubject.subscribe((message : string) => {

//your message will be available here as ``message`` and you can implement your notification logic using this message 
}) 

那么,您可以在
消息服务
中创建一个
私有
行为主体
,并使用
可观察
将其公开为一个
公共
可观察

您还可以在此服务上创建一个
setMessage
方法,以便它可以将新消息推送到
private
行为主体创建的流中

然后可由
handleHandler
使用

然后,您可以简单地
订阅
您的
消息服务所公开的
公共
可观察的

这在代码中看起来像这样:

信息服务:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';

@Injectable()
export class MessageService {

  private message: BehaviorSubject<string> = new BehaviorSubject<string>(null);
  public message$: Observable<string> = this.message.asObservable();

  constructor(private http: HttpClient) { }

  getData() {
    this.http.get('https://jsonplaceholder.typicode.comm/users')
      .subscribe(
        res => console.log(res),
        err => this.errorHandler(err)
      );
  }

  setMessage(newMessage) {
    this.message.next(newMessage);
  }

  private errorHandler(error) {
    this.message.next('Got an error')
  }
}
模板:

<p>Message from the Message Service: {{ message }}</p>
来自消息服务的消息:{{Message}

这里只有一个陷阱:

您不能为错误处理创建另一个服务,因为您的错误处理程序服务将依赖于您的消息服务,反之亦然。这将创建所谓的循环依赖项,从而引发错误



这里有一个供参考的示例。

好吧,您可以在
消息服务
中创建一个
私有
行为主体
,并使用
可观察
将其公开为一个
公共
可观察

您还可以在此服务上创建一个
setMessage
方法,以便它可以将新消息推送到
private
行为主体创建的流中

然后可由
handleHandler
使用

然后,您可以简单地
订阅
您的
消息服务所公开的
公共
可观察的

这在代码中看起来像这样:

信息服务:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';

@Injectable()
export class MessageService {

  private message: BehaviorSubject<string> = new BehaviorSubject<string>(null);
  public message$: Observable<string> = this.message.asObservable();

  constructor(private http: HttpClient) { }

  getData() {
    this.http.get('https://jsonplaceholder.typicode.comm/users')
      .subscribe(
        res => console.log(res),
        err => this.errorHandler(err)
      );
  }

  setMessage(newMessage) {
    this.message.next(newMessage);
  }

  private errorHandler(error) {
    this.message.next('Got an error')
  }
}
模板:

<p>Message from the Message Service: {{ message }}</p>
来自消息服务的消息:{{Message}

这里只有一个陷阱:

您不能为错误处理创建另一个服务,因为您的错误处理程序服务将依赖于您的消息服务,反之亦然。这将创建所谓的循环依赖项,从而引发错误



这里有一个供您参考的示例。

r您正在捕获拦截器中的错误?Sheik Althaf,您没有尝试过使用主题吗?
返回此。message=message
是否确实需要返回
值?我认为您正在访问服务的属性,因此不需要返回。另一个也返回。你在截取器中捕获错误吗?Sheik Althaf,你没有尝试过使用主题吗?
returnthis.message=message
是否确实需要返回
值?我认为您正在访问服务的属性,因此不需要返回。谢谢你的解决方案)谢谢你的解决方案)@TonyaMilner很高兴我能帮上忙。快乐编码:)@TonyaMilner很高兴我能帮上忙。快乐编码:)