我如何在服务中发出一个字符串并进入组件
How can i emit a string in service and get in component
我想在 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;
});
}
有人可以帮助我吗?非常感谢
您可以使用 Subject 作为 Observable,如下所示。
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;
});
}
突然我通过创建静态主题解决了这个问题:
util.service.ts:
static errSubject: BehaviorSubject<any> = new BehaviorSubject<any>('');
app.component.ts:
UtilService.errSubject
.subscribe(data => {
this.errMsg = data;
});
并且不要忘记在 app.module.ts
中提供 UtilService
我想在 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;
});
}
有人可以帮助我吗?非常感谢
您可以使用 Subject 作为 Observable,如下所示。
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;
});
}
突然我通过创建静态主题解决了这个问题:
util.service.ts:
static errSubject: BehaviorSubject<any> = new BehaviorSubject<any>('');
app.component.ts:
UtilService.errSubject
.subscribe(data => {
this.errMsg = data;
});
并且不要忘记在 app.module.ts
中提供 UtilService