【问题标题】:Is there a way for html page to loads after retrieving data from ionic storage?从离子存储中检索数据后,有没有办法加载 html 页面?
【发布时间】:2021-03-20 09:09:55
【问题描述】:

我收到一个错误ERROR TypeError: Cannot read property 'name' of undefined

我有一个从存储中检索数据的服务和一个调用该服务并显示数据的主页。

storage.service.ts

async initilizeData() {
   this.data = await this.storage.get('myData')
}
getData() : MyData {
   return this.data
}

home.page.ts

data: MyData

async ngOnInit() {
   this.storageService.initializeData()
   this.data = this.storageService.getData()
   console.log(this.data)
}

home.page.html

<ion-text>{{data.name}}</ion-text>
<ion-text>{{data.amount}}</ion-text>

ngOnInit() 中的 console.log() 确实为我注销了数据,但在 HTML 页面中 data.name 和 data.amount 似乎都未定义(我知道,当我将 *ngIf="!data == null" 放在代码周围时,错误消失了。)

谢谢大家的回答:)

【问题讨论】:

    标签: angular ionic-framework


    【解决方案1】:

    一种方法是使用ngIf 包装数据,如下所示:

    <ng-container *ngIf="data">
      <ion-text>{{ data.name }}</ion-text>
      <ion-text>{{ data.amount }}</ion-text>
    </ng-container>
    

    data 初始化之前不会显示内容。

    另一种避免这种情况的方法是使用安全导航运算符,如下所示:

    <ion-text>{{ data?.name }}</ion-text>
    <ion-text>{{ data?.amount }}</ion-text>
    

    在这种情况下,如果 data 为 null 或未定义,Angular 将不会尝试访问 data.namedata.amount。请记住,这种方法仍然会渲染 ion-text 元素,但在初始化 data 之前它们将是空的。

    【讨论】:

    • 另一件事。假设我想使用 getter(来自服务)在 ion-text 标签中显示数据,当我从同一服务调用 setter 时,数据会更新吗?
    • @ChuwongKul 答案取决于更新服务的方式/地点/谁,但大多数情况下它会按预期工作并且视图会更新。但更好的方法可能是使用 this blog post 中解释的 RxJs 来更好地控制更改何时以及如何传播到其他组件/页面。
    猜你喜欢
    • 2019-05-23
    • 2019-12-30
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2020-08-25
    • 2013-01-07
    相关资源
    最近更新 更多