angular - 在Angular 4+中使用BehaviorSubject在独立组件之间调用方法
问题描述
在独立(无父子关系)组件之间调用方法的最佳实践是什么?我查看了网络上的几个示例,即,其中一些使用 BehaviorSubject,其中一些使用 Observable,其中一些缺少使用 ngOnDestroy() 方法完成的 observables。有一个关于如何从不是第一个组件的兄弟的另一个组件执行函数的示例用法?我可以成功地应用于我的 Angular7 项目,但我认为使用 BehaviorSubject 有更好的方法,不会遗漏任何一点。任何想法?
解决方案
绝对最佳实践方法是使用文章中提到的共享服务。您不一定必须使用 BehaviorSubject。如果你愿意,你可以使用常规的 Subjects,如果你更熟悉的话,甚至可以使用更经典的 getter 和 setter(尽管我强烈建议使用 RxJS 的响应式方法)。
服务通常被创建为单例,因此您将遇到长时间运行的 Observables 的问题,除非您为其添加一些自定义逻辑(例如,在服务中创建一个用于取消订阅的方法并在组件的任一 onDestroy 挂钩上调用该方法)。
我可能误解了您的问题,但如果您担心暴露 BehaviorSubjects,您可以随时将它们包装在 Observable 中并只暴露 Obsevable:
private myBehaviorSubject = new BehaviorSubject<boolean>(false);
myObservable = this.myBehaviorSubject.asObservable()
希望这回答了你的问题。
推荐阅读
- google-analytics - 谷歌分析用户限制
- ruby-on-rails - 安装后初始化 madmin gem 时出错
- copy - 将 Dynamics CRM on Premise 复制到另一个实例
- python - 不反映评论中的当前用户
- python - 为什么我不断收到锁定文件错误安装 django 或 django 包?
- css - 反应中的窗口宽度
- node.js - 是否应该将 node-gyp 添加为开发依赖项
- excel - EXCEL-VBA-如何交换两个范围的单元格保护
- python - Chromedriver 未从 PATH 打开,直接链接时或在项目文件夹中时不会打开
- django - 使 Django 模型查询不区分大小写