【问题标题】:Update a different component (nested on same level) after http call to Firebase has successfully posted data在对 Firebase 的 http 调用成功发布数据后,更新不同的组件(嵌套在同一级别)
【发布时间】:2019-10-03 15:58:01
【问题描述】:

我正在尝试将一些数据发布到 firebase 数据库并提示成功消息,将用户重定向到同一页面,并在发布请求成功的情况下重置表单。

涉及的组件有add-review.component.tsaddReview.service.ts

add-review.component.tsadd-review文件夹中,addReview.service.tsservice文件夹中,这两个文件夹在同一层级,嵌套在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


【解决方案1】:

需要在组件add-review.component.ts:订阅Observable

onSubmitReview() {
    const newReview = this.addReviewForm.value;
    this.addReviewService.addNewReview(newReview).subscribe(
        response => {
            //reset here using reset() method of forms
        }, error => {
            console.log(error) //catch error
        });
}

为您服务:

addNewReview(newReview: Review) { 
    return this.http.post('https://myApp-6c621.firebaseio.com/reviews.json', newReview);
}

注意:使用 reset() 方法。参考这个文档:https://angular.io/api/forms/FormControl

【讨论】:

  • 感谢您的回复。我已按原样使用您的代码,订阅this.addReviewService.addNewReview 时收到错误消息Property 'subscribe' does not exist on type 'void'." 和"Cannot read property 'subscribe' of undefined" 在控制台中。我尝试创建一个 Observable,就像这样 `response$: Observable;` 并订阅它。代码错误消失了,但是我仍然在控制台中收到“Cannot read property 'subscribe' of undefined”。谢谢。
  • 我的错。在 http 调用之前,我忘记了 return。完美运行,非常感谢!! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多