【问题标题】:Subscribe to a service of a local library订阅本地图书馆的服务
【发布时间】:2019-10-31 06:03:42
【问题描述】:

我创建了一个 Angular 库,当我构建我的主应用程序时,它会使用 ngpackagr 构建。一切正常,但是我现在有以下用例:

在我的图书馆中,我有一项服务,它可以做一些事情。我需要等待它完成,所以我想在我的 LibraryService 中执行此操作:

图书馆服务

reload = new Subject<any>();

// Do something else and after some time:

this.reload.next()

在我的真实应用程序代码中,我有另一个服务应该只听它:

this.libraryService.reload.subscribe(()=>{})

但是订阅永远不会被调用。重载主题和我的服务似乎互不了解。

我需要做什么?我已经在我的 app.module.ts 中导入了库模块

【问题讨论】:

  • 尝试将您的Subject 更改为BehaviorSubjectBehaviorSubject 向所有订阅者发出最后一个值。而Subject 仅在有订阅者执行subject.next() 时才会发出值。它不会发出先前的值。参考 - stackoverflow.com/questions/56469412/…
  • 您不应该在您的服务中公开Subject,您应该将其保密并公开链接的Observable

标签: html angular typescript rxjs ngrx-store


【解决方案1】:

这与您在哪个生命周期挂钩中放置订阅有关 如果你按顺序运行它,你会注意到订阅会被调用

reload = new Subject<any>();
this.reload.next()
this.reload.subscribe(()=>{})

必须在next()之前订阅

考虑将订阅放在构造函数中,看看它是否有效,并在渲染内容时调用 next() 或 ngAfterViewInit

【讨论】:

  • 好的,我现在已经将范围缩小到构造函数被调用了两次。我在我的 App 模块中包含了库模块。这会调用已编译服务的 JS 文件。但是在我的服务中,我将它添加为依赖项,它再次被调用,但这次服务的 Typescript 文件被调用(在调试器中)
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多