当前位置: 首页 > 知识库问答 >
问题:

为什么我在Angular 6中会出错?

高勇
2023-03-14
import { EventEmitter, Injectable } from '@angular/core';

@Injectable()
export class PingOnActionListenerService {
    removingListener = new EventEmitter();

    removeListener(): void {
        this.removingListener.emit();
    }
this._pingOnActionListenerService.removeListener();
    ngOnInit() {
        this._pingOnActionListenerService.removingListener.subscribe(this.deactivatelistener());
    }

    deactivatelistener() {
        window.removeEventListener('click', this.pingIfLastPingIsOld);
    }

core.js:1671错误类型错误:generatorOrNext不是SafeSubscriber.SchedulerFn[as_next](core.js:3565)在SafeSubscriber.push../node_modules/rxjs/_esm5/internal/subscriber.js.safeSubscriber.__tryRunsub(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_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)位于CatchSubscriber.Selector上的PingOnActionListenerService.RemoveListener(ping-on-Action-Listener.Service.ts:19)(日志记录-Interceptor.ts:45)在catchsubscriber.push../node_modules/rxjs/_esm5/internal/operators/catcherror.js.catchsubscriber.error(catcherror.js:33)

共有1个答案

章玮
2023-03-14

您不应该在服务中使用EventEmitter,它应该只用于组件绑定和@output()。您应该将其重新设计为subject/observable:

export class PingOnActionListenerService {
  _removingListener = new BehaviorSubject<boolean>(false);

  removeListener(): void {
    this._removingListener.next(true);
  }

  get removeListener$(): Observable<boolean> {
    return this._removingListener.asObservable()
      .pipe(filter(val => val));
  }
}

在组件B中使用:

ngOnInit() {
  this._pingOnActionListenerService.removeListener$
   .subscribe(() => {
     this.deactivatelistener();
   });
}

不要忘记在组件ngondestroy中取消订阅。

 类似资料:
  • 我试图在Java中将扫描字符串转换为JSONObject,并从JSON Simple导入JSON模块。我已经在构建路径中添加了JSON-simple-1.1.1.jar。然而,当我试图传递内联字符串时。我的内联字符串如下:{“events”:[{“url”:“/操纵多云国家”,“visitorId”:“03c0b5e0-3eeb-382a-8c6d-35e4bb189cf6”,“timestamp

  • 类型“(ConfigService:ConfigService)=>Promise<{Type:String;Port:String;UserName:String;Password:String;Database:String;Host:String;Entities:String[];Synchronize:Boolean;}>”不能分配给类型“(...args:any[])=>({Retry

  • 为什么我在Maven中会出现“401未授权”错误? 以下是调用(底部为完整日志)时出现的错误: 根据这个sonatype支持页面: “如果您收到401,那是因为maven发送了错误的登录凭据,或者根本没有凭据。” 下面是我采取的步骤,下面是我完整的和文件,下面是和的完整日志。 我使用中的用户/pass成功地登录和退出了sonatype.org网站。 我尝试使用手动部署工件,使用命令 但出现了以下错

  • 为什么会引发主线程上的网络异常?its在异步任务上 } 编辑: 完整代码: logcat:

  • 问题内容: 我的第一段代码是我的项目对象文件;第二个是主班。在运行代码没有任何问题之前,但是在添加读写文件之后,我的代码开始收到堆栈流错误。只是正在调用错误的代码段。 我的主班: 如何找到导致堆栈溢出的地方? 问题答案: 创建: 并创造 因此,在初始化时,您将不断创建这些对象 有一个类似的Baeldung示例,用于获取StackOverflowError 由于ClassOne的构造函数实例化了Cl

  • 这也是基于我的最后一个问题。 按照本教程,我将项目克隆到我的机器中,并试图让项目正确构建。 在修复我在上一个问题中得到的错误的过程中,我遇到了一个新的错误。 这是我正在尝试修复/编辑的构建脚本的部分 按照如何检查Gradle版本的说明,我检查了我的版本,发现我正在运行Gradle版本2.2.1。基于此,我改变了 到 然而,在更改构建脚本代码并尝试重建我的项目后,我得到了上面提到的错误(下面是完整的