Javascript Angular 6:向服务事件订阅组件
我需要根据服务器响应状态更改组件中的消息txt。问题是我不知道如何在组件ts文件中侦听该事件并调用其中声明的函数。也许有更好的方法来显示这样的通知 处理错误ts: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){ 该信息='Сааааааааааааааааааа
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很高兴我能帮上忙。快乐编码:)