【问题标题】:Angular : Fetch new data after changeAngular:更改后获取新数据
【发布时间】:2018-01-18 14:19:08
【问题描述】:

我有一个服务,它使用两种方法向我的 API 发送 HTTP 请求:一种是获取数据,另一种是在点击事件后更新对象。

我的初始数据在调用ngOnInit()时存储:

ngOnInit() {
    this.data = this.myservice.getData();
}

点击按钮时调用方法:

update(id) {
    this.myservice.update(id);    
}

这很好用,但是当我单击更新方法时,我需要刷新页面以查看具有新更新值的数据。 我对 Angular 很陌生,我想知道如何解决这个问题。更新调用后,我尝试在更新函数中重新获取数据,但没有帮助。

【问题讨论】:

  • 您是否尝试在调用this.myservice.update(id); 并将其重新分配给this.data 时返回更新后的数据?喜欢this.data = this.myservice.update(id);
  • 基本上你不需要getData()update()这两个函数,只需在update()中使用相同的代码this.data = this.myservice.getData();

标签: angular rest


【解决方案1】:

您需要使用更新后的新 ID 更新您的“数据”变量。只需在调用更新方法后执行this.data = this.myservice.getData();。这就是为什么您在重新加载页面时看到它的原因。你在 ngOnInit 上调用它

【讨论】:

  • 我试过了,但我必须点击按钮两次才能看到项目消失?
  • 不,你没有。只需单击按钮即可。如果这不起作用,也许你必须让你的函数返回一个 observable 并订阅等待返回。 =)
【解决方案2】:

如果发生任何更改,您可以使用主题包装的 observable 并订阅任何主题。如果发生任何变化,回调函数将重新抓取数据以更新列表。

为您服务

dataChangesSubject = new Subject<any>();

然后修改函数(我假设你的服务中声明了数据)

在你的服务更新函数的末尾添加

      this.dataChangesSubject.next(this.data);

在你的组件中

ngOnInit() {
  this.myservice.dataChangesSubject.
    subscribe((data) => this.data = data;
    )
  this.data = this.myservice.getData();
}


或者,您可以让 observable 不返回任何数据,并执行您所做的任何代码来更新您的列表。 所以在你的服务中,仍然声明主题
dataChangesSubject = new Subject<void>();

在您的服务更新功能中,只需通知更改即可。

this.dataChangesSubject.next();

然后在您的组件中,添加您所做的任何代码以在 next 的回调函数中获取最新数据

ngOnInit() {
  this.myservice.dataChangesSubject.
    subscribe(() => {
      //code goes here 
      this.data = this.myservice.getData();
      }
    )
  this.data = this.myservice.getData();
}

【讨论】:

  • 我的服务类中的更新函数不返回数据,只是成功或失败的消息。
  • @mockingbid,它返回的内容并没有什么不同。如果您订阅了一个主题,您可以在该主题上有更新调用 &lt;observable/subject&gt;.next(&lt;data&gt;) 时添加一行,并发出数据以便所有订阅者都可以得到它
  • 对不起,我不太明白你的意思。我有两个方法 getData 返回一个响应对象,然后在我的组件中订阅以使用我的 ngOninit 中的this.myservice.getData().subscribe(data =&gt; { this.items = data) 将我的项目分配给数据。我的更新方法发送一个发布请求并返回一个包含消息的对象响应。在this.dataChangesSubject.next(this.data)this.data 中对应的是什么?`
  • @mockingbid,我添加了第二个示例,以防您的服务中没有任何数据。最重要的是,当您的服务被调用更新时,它会通知所有组件它更新。在您的组件中,您可以订阅,并在回调函数中调用代码(请参见大括号)以获取数据增益
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多