【发布时间】:2020-03-02 21:28:20
【问题描述】:
在 TypeScript / Angular 中,您通常会调用一个返回可观察对象的函数并在组件中订阅它,如下所示:
this.productsService.getProduct().subscribe((product) => { this.product = product });
当代码在管理数据的类中运行时这很好,但我认为这不应该在组件中处理。我可能错了,但我认为组件的工作应该是请求和显示数据而不处理如何检索数据。
在 Angular 模板中,您可以这样做来订阅并显示可观察对象的结果:
<h1>{{ product.title | async }}</h1>
是否可以在组件类中有这样的东西?我的组件显示一个表单并在输入后检查日期是否有效。提交表单被阻止,直到值有效并且我想将它背后的所有逻辑保留在应该订阅 AJAX 调用的服务中,组件只检查它是否有一个有效的日期。
class FormComponent {
datechangeCallback(date) {
this.dateIsValid$ = this.dateService.checkDate(date);
}
submit() {
if (this.dateIsValid$ === true) {
// handle form submission...
}
}
}
【问题讨论】:
-
你为什么不喜欢可观察/订阅?您真的希望您的代码阻止对 checkDate 的可能长时间运行的调用吗?如果响应中涉及数据处理,那么您仍然可以将其放入包装在您自己的 Observable 中的服务中。这是像 JS 这样的单线程语言的工作方式,所以我建议熟悉 Observables,它肯定比过去的回调更简洁。
-
嗨。我的问题不在于订阅 observable,而在于订阅和处理组件中的响应。我添加了很多冗余代码,使其可读性降低。这就是模板中存在异步管道的原因,可惜它在组件类中不存在。
标签: javascript angular typescript rxjs