使用 Ionic 5 将数据异步到子页面

Async data to child page with Ionic5

我正在尝试使用 Ionic Storage 在 ionic 中的父页面和子页面之间传递数据,以异步方式获取数据。

发生的事情是,当我到达页面时,数据还没有从存储中 return 并且我有一个未定义的错误:错误类型错误:无法读取 属性 'name' 未定义。

我在用什么:

  goToMediaDetails(data) {
    this.router.navigate([`slate-list/${data.id}`]);
  }
  {
    path: "slate-list/:mediaId",
    loadChildren: () =>
      import("./pages/slate-list/slate-list.module").then(
        m => m.SlateListPageModule
      )
  }
import { Component, OnInit } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";

//Services
import { MediaService } from "../../services/media.service";

@Component({
  selector: "app-slate-list",
  templateUrl: "./slate-list.page.html",
  styleUrls: ["./slate-list.page.scss"]
})
export class SlateListPage implements OnInit {
  public media: any;
  private mediaId: number;

  constructor(
    private route: ActivatedRoute,
    private router: Router,
    private mediaSvc: MediaService
  ) {
    //if the id is provided in the url, get the media by id using the service
    if (route.snapshot.params.mediaId) {
      this.mediaId = route.snapshot.params.mediaId;
      this.mediaSvc.getMediaById(this.mediaId).then(result => {
        this.media = result;
      });
    }
  }
  //GET Media By ID
  getMediaById(mediaId) {
    let mediaToReturn = new Media();
    return new Promise(resolve => {
      this.storage.get("media").then(result => {
        if (result != null && result.length != 0) {
          mediaToReturn = result.find(x => x.id == mediaId);
        }

        resolve(mediaToReturn);
      });
    });
  }
<ion-content>
  <ion-grid class="ion-no-padding">
    <ion-row>
      Slates for <strong>{{media.name}} </strong> / Episode: {{media.episode}}
    </ion-row>
  </ion-grid>
</ion-content>

是的,数据是使用该服务 return 编辑的,我 console.log 它紧接在 .then 之后并且数据就在那里,所以我假设这只是一个典型的异步情况.

我看到我可以引入一个加载组件,让它显示 1 秒或更多一点,然后数据就会在那里,但是 better/official 这样做的方法吗?

我正处于ionic/async旅程的开始,如果我犯了一些愚蠢的错误,请原谅我

试试这个:

ts 文件:

public media: any = {}

html:

Slates for <strong>{{media?.name}} </strong> / Episode: {{media?.episode}}