首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离子框架在页面加载前初始化值

离子框架在页面加载前初始化值
EN

Stack Overflow用户
提问于 2017-08-02 22:06:41
回答 2查看 1.8K关注 0票数 2

我有一个页面,在这个页面中,我从构造函数内部的存储中获得一个对象。但是,当我想在html中获得该对象的属性时,会抛出异常Cannot read property "..." of undefined

我在一个页面中设置数据,然后加载另一个页面。

第一页:

代码语言:javascript
复制
let detailsResponse = this.agentService.getAgentDetails(data.data.session.ssid, data.data.session.device);
detailsResponse.then(agent => {
   this.storage.set('agent', JSON.stringify(agent.data)).then(() => {
       this.navCtrl.push(TabsPage);
   });
});

其他页:

代码语言:javascript
复制
import {Storage} from '@ionic/storage';
....

constructor(public navCtrl: NavController,
    public navParams: NavParams,
    public toastCtrl: ToastController,
    public alertCtrl: AlertController,
    public storage: Storage) {

    this.storage.get('agent').then((agent) => {
        this.sessionAgent = JSON.parse(agent);
    });
}

我确信sessionAgent对象不是null,但是当我想获得一个属性时,我会得到异常:

代码语言:javascript
复制
<ion-fab top right edge>
    <button color="default" ion-fab>{{sessionAgent.status.value}}</button>
    <ion-fab-list>
        <button color="secondary" *ngIf="sessionAgent.status.value == 'Offline'" (click)="doOnline()" ion-fab>On</button>
        <button color="danger" *ngIf="sessionAgent.status.value == 'Online'" (click)="doOffline()" ion-fab>Off</button>
    </ion-fab-list>
</ion-fab> 

但是,当我在访问html对象之前进行*ngIf检查时,它解决了这个问题。

代码语言:javascript
复制
<ion-fab top right edge *ngIf="sessionAgent != null">
    <button color="default" ion-fab>{{sessionAgent.status.value}}</button>
    <ion-fab-list>
        <button color="secondary" *ngIf="sessionAgent.status.value == 'Offline'" (click)="doOnline()" ion-fab>On</button>
        <button color="danger" *ngIf="sessionAgent.status.value == 'Online'" (click)="doOffline()" ion-fab>Off</button>
    </ion-fab-list>
</ion-fab>

我不明白这种行为的原因。在加载页面之前,我应该在哪里填充对象(rest服务调用,地区存储)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-02 22:16:44

从存储中获取数据是异步的,当您正在获取对象时,角将希望初始化页面。但是由于对象还没有出现,它将抛出一个异常。

您应该在这里使用NavParams。因为这将使您同步获得该对象。

首页:

代码语言:javascript
复制
this.navParams.push(TabsPage, { data: agent.data });

其他页面:

代码语言:javascript
复制
constructor(private navParams: NavParams){
    this.sessionAgent = this.navParams.get('data');
}

若要保护不被获取的异步值,您可以使用

安全导航操作员

代码语言:javascript
复制
<button color="default" ion-fab>{{sessionAgent?.status?.value}}</button>
票数 1
EN

Stack Overflow用户

发布于 2017-08-02 23:05:05

在访问任何异步值(用于列表的*ngIf )之前,我会在外部<div>中执行一个*ngFor检查。

代码语言:javascript
复制
<ion-fab top right edge>
    <div *ngIf="sessionAgent">
      <button color="default" ion-fab>{{sessionAgent.status.value}}</button>
      <ion-fab-list>
          <button color="secondary" *ngIf="sessionAgent.status.value == 'Offline'" (click)="doOnline()" ion-fab>On</button>
          <button color="danger" *ngIf="sessionAgent.status.value == 'Online'" (click)="doOffline()" ion-fab>Off</button>
      </ion-fab-list>
    </div>
</ion-fab> 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45471794

复制
相关文章

相似问题

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