【问题标题】:Angular router with data re-resolve after update更新后重新解析数据的角度路由器
【发布时间】:2017-12-18 08:24:39
【问题描述】:

我有一个组件,其中数据由路由器解析,例如:

this.route.data.subscribe((data => { .....

现在我们向这个组件添加了一个 http post 事务,它改变了我们解析的数据的状态。

有没有方便的方法来重新解析路线数据?

添加更多代码...为了保护 IP 已更改了一些内容,因此请原谅任何语法错误。

在子组件中,订阅帖子:

this.myDataService.postUpdate(id, this.noteText).subscribe(
  data => {
    this.userMessageService.send('success', 'Update Complete', 'The update has been updated.');
  },
  error => this.userMessageService.send('error', 'Update Error', 'The update failed: ' + <any>error)
);

然后在“myDataService”中:

postUpdate(id: number, notes: string) {
    return this.http
        .post(this.url,
        { "Id": id, "Notes": notes }, options)
        .map((res) => {
            return {};
        })
        .catch((e) => {
            return Observable.throw(e.message || e);
        });
}

【问题讨论】:

  • 您可以发布您的 http 邮政编码吗?你在哪里添加了 http 帖子?
  • http post在服务中,从主组件的子组件调用。子组件订阅帖子。如果您认为有帮助,我会在 OP 中添加更多代码。
  • 听起来您在主组件的 this.route.data.subscribe() 中需要 ViewChild (learnangular2.com/viewChild) 之类的东西,您可以触发子组件方法来订阅帖子.
  • @LLai,我可以补充一下。但是让我们假设对 post 服务的调用在主要组件中。我仍然会有同样的问题。帖子完成后如何重新解析数据?
  • 嗯我想我对“重新解决”感到困惑。是否要重新触发解析中处理的第一个 http 请求?所以解决 -> 发布 -> 解决

标签: angular angular-components angular-router


【解决方案1】:

我会将您的 observable 与 flatMap 链接在一起。

// in your main.component
this.route.data.flatMap(res => { 
    return this.myDataService.postUpdate(id, this.noteText);
}) 
.flatMap(res => { 
    return this.myDataService.initialObservable(); // This is the same observable that you have in your resolve guard
} 
.subscribe(res => { 
    // called when 3 successive http request have finished 
});

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2023-03-26
    • 2018-10-12
    • 2018-09-13
    • 2016-03-21
    • 2019-11-10
    相关资源
    最近更新 更多