在 Angular 库中使用 RxJS
Posted
技术标签:
【中文标题】在 Angular 库中使用 RxJS【英文标题】:Use RxJS in an Angular library 【发布时间】:2019-08-13 11:32:28 【问题描述】:我创建了一个角度库“mylib”
我创建了一个使用来自 rxjs 的 BehaviorSubject Observable 的服务。
例如
currentLanguage = new BehaviorSubject<string>(null);
我在 mylib 中有一个组件,它将在选择输入的更改事件上设置语言。
this.myService.currentLanguage.next('en');
构建“mylib”并在myapp
中使用后...我可以从myapp订阅myService
。
如果我更改选择输入上的值,我可以看到该事件,但是没有下一个值发送到 BehaviorSubject,控制台中也没有错误。所以我不能从 mylib 的组件发出值变化。
但是...如果我从 myapp 发出下一个值...它可以工作...
所以我的问题是为什么不能从自定义角度库的组件中使用“下一个”,但它来自使用该库的组件......并且可以从应用程序的任何组件导入图书馆服务?
也许它可能与 mylib.module.ts 中的 @NgModule 相关,有可能我必须在 imports Array 中导入 rxjs 吗?我试着
imports: [CommonModule, FormsModule, BehaviorSubject]
出错
一个想法? :)
谢谢
迈克
【问题讨论】:
希望对您有所帮助,angular.io/guide/…myLib
的模块声明的exports
中有myService
吗?
【参考方案1】:
问题可能是 lib 和应用程序正在使用服务的两个实例。
确保在您的服务中指定了“providedIn: 'root'”。 例如:
@Injectable(
providedIn: 'root',
)
export class myService
.....
还要确保使用“dist”目录中的库名称导入服务,而不是使用相对路径。
例如:
import myService from 'myLib';
【讨论】:
是 @Injectable( providedIn: 'root') 已指定 您如何从应用程序的库中导入您的服务?使用“dist”目录中的库名称导入它,而不是使用相对路径。你能在 StackBlitz 中重现这个吗? 谢谢你!是服务库的路径... myapp 中建议的路径是错误的!非常感谢 请edit你的答案让它看起来更像一个答案。 ATM 它看起来像一个评论,但因为它帮助了 OP,所以你想更好地对其进行形式化 适当地编辑了我的答案。以上是关于在 Angular 库中使用 RxJS的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 2 应用程序中使用本地 npm 存储库中的组件
“无法解析服务的所有参数:(?)”当我尝试在 Angular 10 中使用库中的服务时
如何从 Angular 的 PrimeNG 库中为 AutoComplete 组件设置焦点
在外部 JavaScript 库中定义函数时如何检查未定义? (Angular4/5)