【问题标题】:Ionic view not updating after return from provider promise从提供者承诺返回后,离子视图未更新
【发布时间】:2019-06-22 00:23:17
【问题描述】:

我对 Ionic 和 JS 编程很陌生,所以请原谅我的无知。我已经能够从我设置的其他 REST 提供程序获取数据,并且更新的值可以正常显示。几乎从其他一些工作功能中复制了代码。这一次,无论我怎么尝试,都不会更新。

提供者:

return new Promise(resolve => {

this.http.post(this.apiUrl)
  .subscribe(res => {
     resolve(res);
  },
  (err: HttpErrorResponse) => {
        if (err.error instanceof Error) {
            this.error = {"text":"App error occured."};
            console.log('Client-side error occured.');
        } else {
            this.error = {"text":"Cloud server error occured."};
            console.log('Cloud server error occured:'+err);
        }
        return this.error;
});
});
}

HTML:

    <ion-item>
      <ion-label stacked>Make</ion-label>
      {{vesselData?.make}}
    </ion-item>

功能:

vesselData = {"make":""};
updateVesselInfo() {

  const data = JSON.parse(localStorage.getItem('userData'));

  this.vesselProvider.getVesselData(data.userData.sim).then(vData => {
      this.vesselData = vData;
  }).catch(console.log.bind(console));
}, (err) => {
  console.log("Vessel: ".err);
});

如果我在 .then() 中记录从提供程序返回的数据,则表明提供程序返回了正确的数据。但是,它不会更新任何vesselData 变量。知道我哪里出错了吗?

【问题讨论】:

  • 嘿,您在 Ionic 3 中使用的是哪个版本的 Angular?
  • 离子(离子 CLI):4.9.0(/usr/local/lib/node_modules/ionic)离子框架:离子角 3.9.2
  • 所以 CLI 和 ioni-angular 包不是您使用的 Angular 版本。请检查您的 package.json 并命名以下行:“@angular/core”:“???”
  • @angular/core": "5.2.11
  • 很酷,然后查看我的评论并提供 stackblitz。这应该工作

标签: ionic-framework ionic3


【解决方案1】:

所以现代的方法是在你的提供者中提供返回 Observable 的方法,然后在你的组件中调用这个方法并订阅它来获取数据:

在您的提供商中:

getVesselData() {
    return this.http.post(this.apiUrl)
        .pipe(
            catchError(this.yourErrorHandlerInsideProviderHere)
        )
}

现在在您的组件中:

vesselData = {"make":""};

updateVesselInfo() {

  this.provider.getVesselData().subscribe( vesselData => {
      this.vesselData = vesselData;
  })
}

理想的做法是在提供程序内部和组件内部保持错误处理,您的方法应该是轻量级的。

只要您使用 Angular 4.3+ 并使用随附的现代 HTTP 模块,此示例应该适合您。

更新: 请确保您正确绑定到模板。这是示例: https://stackblitz.com/edit/ionic-wqrnl4 我跳过了其余调用(http),但原理是一样的。

【讨论】:

  • 那行不通。结果相同。数据已返回,但 HTML 中的字段未更新。
  • 如果您将在离子标签的主体中进行绑定,它将起作用。见这里:stackblitz.com/edit/ionic-wqrnl4
  • 在尝试了您的示例但失败后,我删除了我的 .html 并从头开始重建它。那解决了它。不知道发生了什么。我确实将我的提供程序和组件更改为您的代码。谢谢。
  • 太好了,请随时在此处阅读更多内容:angular.io/guide/http。 Angular 的文档对编码约定非常好
猜你喜欢
  • 2016-02-22
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2013-12-27
  • 2014-03-28
  • 1970-01-01
相关资源
最近更新 更多