【发布时间】:2019-02-06 10:26:26
【问题描述】:
我有一个服务:
import { EventEmitter, Injectable } from '@angular/core';
@Injectable()
export class PingOnActionListenerService {
removingListener = new EventEmitter();
removeListener(): void {
this.removingListener.emit();
}
在组件 A 我调用服务:
this._pingOnActionListenerService.removeListener();
在组件 B 我想监听服务:
ngOnInit() {
this._pingOnActionListenerService.removingListener.subscribe(this.deactivatelistener());
}
deactivatelistener() {
window.removeEventListener('click', this.pingIfLastPingIsOld);
}
当我运行这段代码时, 我在控制台收到错误消息:
core.js:1671 ERROR TypeError: generatorOrNext 不是函数 在 SafeSubscriber.schedulerFn [as _next] (core.js:3565) 在 SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:195) 在 SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (Subscriber.js:133) 在 Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next (Subscriber.js:77) 在 Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54) 在 EventEmitter.push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next (Subject.js:47) 在 EventEmitter.push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit (core.js:3537) 在 PingOnActionListenerService.push../src/app/core/services/ping-on-action/ping-on-action-listener.service.ts.PingOnActionListenerService.removeListener(ping-on-action- listener.service.ts:19) 在 CatchSubscriber.selector (logging-interceptor.ts:45) 在 CatchSubscriber.push../node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchSubscriber.error (catchError.js:33)
【问题讨论】:
-
你需要键入声明事件发射器,它可能不会解决问题,但你需要它
-
this.deactivatelistener()返回未定义,因此您将通过undefined订阅 -
this._pingOnActionListenerService.removingListener.subscribe(this.deactivatelistener());你没有在这里调用函数removingListener。 -
@callback
removingListener不是一个函数,它是一个EventEmitter -
也在
subscribe(this.deactivatelistener());.. 它应该是subscribe(this.deactivatelistener)或subscribe(() => this.deactivatelistener());