【发布时间】:2018-08-02 18:51:26
【问题描述】:
我正在学习 RxJs,我正在寻求对我的假设的确认或更正。
我正在尝试在服务中使 public read only 可观察,我可以在我的服务类的各个位置使用.next()。我想知道这是否是正确的方法:
private myObservable = new Subject<T>();
public myObservable$: Observable<T> = this.myObservable.asObservable();
- 用户可以订阅
myObservable$ - 我可以用
myObservable.next(...);
它工作得很好,但我有足够的经验知道我可能只是一个不知情的白痴(RxJS 很大)。对于所述用例,这是正确的模式和正确的对象吗?
【问题讨论】:
-
是的,这是一种常见且正确的模式。但在许多情况下,它是不需要的。如果您需要向非绑定的组件发送通知,您只需要一个主题。如果你正在绑定,Angular 的变更检测可以处理通知。我有一个主题/行为主题和匹配代码的示例,这里没有它具有相同的功能:github.com/DeborahK/MovieHunter-communication(MH-Take4 和 MH-Take5)
-
@DeborahK 根据该线程中一些回复的一些 cmets,我很好奇您对在 TypeScript 中使用 private 有何想法。是否应该不使用 private 编写代码,因为它实际上不是私有的,是否应该像在编写 C# 一样在 typescript 中编写代码并且简单地忽略 transpile 将私有和公共视为相同的事实?
-
TypeScript 的全部意义在于通过为我们提供类型、接口和可访问性关键字(例如
private)来为我们提供编码帮助/生产力。如果我们不打算使用这些东西……使用 TypeScript 就没有意义了。所有这些都被转译出来的事实并不重要。在某个时刻,这一切都变成了 1 和 0。 :-) -
你是对的。 TypeScript 提供了更高的 开发时间 抽象......它实际上对运行时没有任何作用。
-
@DeborahK 正如其设计者所说,typescript 的目的是为 JavaScript 的隐式类型系统提供静态可验证的形式化。切线地,当使用各种框架的程序员希望假装它描述了一个类似 Java 的类型系统时,这个错误是迄今为止在 Angular 社区中最常见的。长期以来,许多开发人员都不愿意学习 JavaScript,认为 TypeScript 提供了 JavaScript 的 替代 是严重错误的。凭借您在 JS 方面的背景以及作为教育工作者的角色,您无疑知道这一点。
标签: javascript angular typescript rxjs angular-services