我想在util.service.ts处理一些错误时发出一个字符串,这样我就可以在app.component.ts中获取此消息并显示它,但我无法订阅发射器。 这是我的代码,但它不起作用:
在util.service.ts中:
export class UtilService {
errMsgEmitter = new EventEmitter();
private handleError(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body['error'] || JSON.stringify(body);
errMsg = `${error['status']} - ${error['statusText'] || ''} ${err}`;
} else {
errMsg = error['message'] ? error['message'] : error.toString();
}
console.error(errMsg);
this.errMsgEmitter.emit(errMsg);
return Observable.throw(errMsg);
}
/**
* get event emitter
* @returns {EventEmitter<any>}
*/
getNavChangeEmitter() {
return this.errMsgEmitter;
}
app.component.ts中的我有这个:
ngOnInit() {
this.utilService.getNavChangeEmitter()
.subscribe(data => {
this.errMsg = data;
});
}
任何人都可以帮助我吗?非常感谢
答案 0 :(得分:0)
您可以将主题用作可观察,如下所示。
import { Subject } from 'rxjs/Subject';
export class UtilService {
private message = = new Subject<string>();
public errorMessage$ = this.message.asObservable();
private error: string = '';
private handleError(error: Response | any) {
this.error = '';
if (error instanceof Response) {
const body = error.json() || '';
const err = body['error'] || JSON.stringify(body);
this.error = `${error['status']} - ${error['statusText'] || ''} ${err}`;
} else {
this.error = error['message'] ? error['message'] : error.toString();
}
console.error(this.error);
this.message.next(this.error);
}
}
// app.component.ts
ngOnInit() {
this.utilService.errorMessage$.subscribe(error => {
this.errMsg = error;
});
}
答案 1 :(得分:0)
突然间我通过制作一个静态的主题来解决这个问题:
util.service.ts:
static errSubject: BehaviorSubject<any> = new BehaviorSubject<any>('');
app.component.ts:
UtilService.errSubject
.subscribe(data => {
this.errMsg = data;
});
并且不要忘记在app.module.ts中提供UtilService