javascript - 从公共(public)文件调用 Angular Observable.subscribe()

标签 javascript angular

我从两个文件(即 x.ts 和 y.ts)调用以下函数,但在从第三方工具检查时,它显示了两个文件中的重复代码。它位于我在两个文件中调用的消息服务下方。

this.dataSubscription = this.dataService.allmesgeObeject.subscribe(data=> {
  if (data) {
    this.x= data.x;
    this.y= data.y;
  }
});

是否有任何方法可以将订阅功能放入一个公共(public)文件中并在各自的文件中接收数据。

最佳答案

您可以在服务中创建主题,然后从两个组件中订阅它。这样您只需调用 API 一次,两个组件都将使用最新数据进行更新

    export class DataService{
      public allMessages: Subject<any> = new Subject();

      constructor(
        private http: HttpClient
      ) { }

      allmesgeObeject() {
        return this.http.get(...).pipe(
          map((result) => {
             this.allMessages.next(result);
          }));
      }
}

然后从服务外部调用一次

this.dataService.allmesgeObeject.subscribe();

现在,您可以在两个组件中订阅之前创建的主题。

this.dataService.allMessages.subscribe(data=> {
  if (data) {
    this.x= data.x;
    this.y= data.y;
  }
});

关于javascript - 从公共(public)文件调用 Angular Observable.subscribe(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248825/

相关文章:

javascript - 为什么我的 React 应用程序在获取数据后会重新加载?

javascript - Angular 6 : HttpHeaders Cannot read property 'length' of null in Chrome and IE11 (and not in Firefox)

angular - EventEmitter 的正确用法是什么?

typescript - 将 CodeMirror 与 Angular2 集成( typescript )

asp.net - Angular HttpClient 调用缺少查询字符串和授权 header

javascript - 如何在几秒钟内将数字从 00.000000 增加到 48.853373 0.00001

javascript - 如何从 Aurelia 中的函数更新属性

javascript - 将 jPlayer 播放列表轨道放入变量中以在多个播放列表中重复使用

javascript - JSDoc 正确记录事件监听器

twitter-bootstrap - Angular2 - FF 和 IE 中的 Bootstrap v3 datetimepicker 问题