首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Ionic5异步数据到子页面

用Ionic5异步数据到子页面
EN

Stack Overflow用户
提问于 2020-02-28 16:27:24
回答 1查看 243关注 0票数 0

我正在尝试使用ionic存储在一个父页面和一个子页面之间传递数据,以便以异步方式获取数据。

正在发生的情况是,当我到达页面时,数据还没有从存储区返回,而且我有一个未定义的错误: ERROR TypeError:无法读取未定义属性的“名称”。

我用的是:

在网格中的一个项目中单击的父页面,它使用router.navigate将我转发到子页面

代码语言:javascript
复制
  goToMediaDetails(data) {
    this.router.navigate([`slate-list/${data.id}`]);
  }

  • 子路由列在app-routing.module.ts中,接收id

代码语言:javascript
复制
  {
    path: "slate-list/:mediaId",
    loadChildren: () =>
      import("./pages/slate-list/slate-list.module").then(
        m => m.SlateListPageModule
      )
  }

  • 我在子构造函数页面中获取mediaId,并使用服务从离子存储获取数据.

代码语言:javascript
复制
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;
      });
    }
  }

  • 这里是返回承诺

的服务代码

代码语言:javascript
复制
  //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);
      });
    });
  }

  • 这里是简单的html,给出了问题

代码语言:javascript
复制
<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>

是的,数据是使用服务返回的,我就在console.log之后返回数据,所以我假设这只是典型的异步情况。

我看到我可以引入一个加载组件,让它显示1秒或更多一点,然后数据就会出现,但是这是更好的/官方的方法吗?

我正处于离子/异步的旅程开始,所以如果我犯了一些愚蠢的错误,请原谅我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-28 19:35:48

试试这个:

ts文件:

代码语言:javascript
复制
public media: any = {}

html:

代码语言:javascript
复制
Slates for <strong>{{media?.name}} </strong> / Episode: {{media?.episode}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60455739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档