首页 > 解决方案 > 在Angular 4+中使用BehaviorSubject在独立组件之间调用方法

问题描述

在独立(无父子关系)组件之间调用方法的最佳实践是什么?我查看了网络上的几个示例,即,其中一些使用 BehaviorSubject,其中一些使用 Observable,其中一些缺少使用 ngOnDestroy() 方法完成的 observables。有一个关于如何从不是第一个组件的兄弟的另一个组件执行函数的示例用法?我可以成功地应用于我的 Angular7 项目,但我认为使用 BehaviorSubject 有更好的方法,不会遗漏任何一点。任何想法?

标签: angulartypescriptrxjsangular6behaviorsubject

解决方案


绝对最佳实践方法是使用文章中提到的共享服务。您不一定必须使用 BehaviorSubject。如果你愿意,你可以使用常规的 Subjects,如果你更熟悉的话,甚至可以使用更经典的 getter 和 setter(尽管我强烈建议使用 RxJS 的响应式方法)。

服务通常被创建为单例,因此您将遇到长时间运行的 Observables 的问题,除非您为其添加一些自定义逻辑(例如,在服务中创建一个用于取消订阅的方法并在组件的任一 onDestroy 挂钩上调用该方法)。

我可能误解了您的问题,但如果您担心暴露 BehaviorSubjects,您可以随时将它们包装在 Observable 中并只暴露 Obsevable:

private myBehaviorSubject = new BehaviorSubject<boolean>(false);
myObservable = this.myBehaviorSubject.asObservable()

希望这回答了你的问题。


推荐阅读