【发布时间】:2019-10-03 15:58:01
【问题描述】:
我正在尝试将一些数据发布到 firebase 数据库并提示成功消息,将用户重定向到同一页面,并在发布请求成功的情况下重置表单。
涉及的组件有add-review.component.ts和addReview.service.ts。
add-review.component.ts在add-review文件夹中,addReview.service.ts在service文件夹中,这两个文件夹在同一层级,嵌套在app下。
服务成功发布数据后,我一直试图让其他组件知道,以便可以 reset() 并重新启动表单,但没有运气。
我不能使用eventEmitter 和@Output(),因为add-review.component.ts 是通过<router-outlet> 提供的,因此没有直接的父子链接。
现在有一些代码:
add-review.component.ts:
onSubmitReview() {
const newReview = this.addReviewForm.value;
this.addReviewService.addNewReview(newReview);
}
add-review.service.ts:
addNewReview(newReview: Review) {
this.http.post('https://myApp-6c621.firebaseio.com/reviews.json', newReview).subscribe(reportData => {
console.log(reportData);
}
我想:
1)如果数据已经成功发布,返回页面并重置表单(在我已经使用this.router.navigate(['/add-review']);重定向的服务文件中)并且它工作正常。
2) 否则,返回同一页面,数据仍在表单输入中。
如何在成功发布请求后从add-review.service.ts 更新add-review.component.ts?
我知道可能有一种更简单的方法,即直接在组件上执行发布请求,但我对如何在同级路由器插座嵌套组件之间进行此类通信感兴趣。
感谢您的帮助!
【问题讨论】:
-
为什么要在服务内订阅?通常,您的组件会进行订阅。一旦你这样做了,你就可以在订阅回调中做任何你需要的事情。
-
我订阅只是为了在控制台中记录 reportData 调用,感谢您指出。此外,我想在帖子成功或不成功的情况下触发带有不同消息的警报(所以如果 reportData 为真)。
标签: angular firebase components parent-child communicate