【问题标题】:Angular data service being called twiceAngular 数据服务被调用两次
【发布时间】:2019-11-16 14:03:06
【问题描述】:

我有一个 Angular 7 应用程序在调用服务两次时遇到问题。

我有多个连接到 websocket 的 observables。在套接字中,我正在监听不同的事件发生并执行适当的操作。

app.module.ts

import { DataService } from './data.service';
....
providers: [
  DataService
],

one.component.ts

import { DataService } from './data.service';
....
constructor(private data: DataService) { }
....
ngOnInit() {
  this.data.receiveMessage().subscribe(msg => {
    this.msg = msg;
  });
}

两个.component.ts

import { DataService } from './data.service';
....
constructor(private router: Router, private data: DataService) { }
ngOnInit() { }
....

data.service.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as io from 'socket.io-client';

@Injectable()
export class DataService {
    receiveMessage() {
      return new Observable(observer => {
        this.socket.on('sendMessage', msg => {
          observer.next(msg);
        });
      });
    }
    ....
    other observables
 }

如果我使用 Injectable provider root 也会发生同样的事情。

我在应用程序中使用了其他可观察对象,但我在 OnInit 中使用的只是这一种方法,但将其取出会导致应用程序停止工作。

【问题讨论】:

  • 您可以使用rxJS shareReplay。检查这个stackoverflow answer
  • 感谢您的建议。原来我在 app.component.html 中添加了 ,这导致整个应用程序呈现两次。愚蠢的错误。

标签: angular


【解决方案1】:

在 app.component.html 中添加,导致整个应用程序渲染两次

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多