Попробуйте использовать * ngIf , чтобы отображать данные пользователя только после успешной загрузки currentUser
.Поскольку currentUser
не инициализируется со значениями по умолчанию для всех этих свойств, которые вы отображаете и загружаете асинхронно, вы можете использовать эту структурную директиву, чтобы не пытаться получить доступ к этим свойствам неопределенного объекта до тех пор, пока он не будет успешно загружен / разрешен:
<ion-content *ngIf=“currentUser” padding>
<ion-list>
<ion-label>Name: {{currentUser.name}}</ion-label>
<ion-label>Email: {{currentUser.email}}</ion-label>
<ion-label>Password: {{"*****"}}</ion-label>
<ion-label>Phone: {{currentUser.name}}</ion-label>
<ion-label>Street 1: {{currentUser.street1}}</ion-label>
<ion-label>Street 2: {{currentUser.street1}}</ion-label>
<ion-label>City: {{currentUser.city}}</ion-label>
<ion-label>State: {{currentUser.state}}</ion-label>
<ion-label>Zip: {{currentUser.zip}}</ion-label>
</ion-list>
<button ion-button (click)="logout()">Logout</button>
</ion-content>
Вы можете расширить эту концепцию, используя оператор else
с *ngIf
, чтобы, возможно, показать загрузочное сообщение или подобное во время загрузки данных:
<ion-content *ngIf=“currentUser; else loadingCurrentUser” padding>
<ion-list>
<ion-label>Name: {{currentUser.name}}</ion-label>
<ion-label>Email: {{currentUser.email}}</ion-label>
<ion-label>Password: {{"*****"}}</ion-label>
<ion-label>Phone: {{currentUser.name}}</ion-label>
<ion-label>Street 1: {{currentUser.street1}}</ion-label>
<ion-label>Street 2: {{currentUser.street1}}</ion-label>
<ion-label>City: {{currentUser.city}}</ion-label>
<ion-label>State: {{currentUser.state}}</ion-label>
<ion-label>Zip: {{currentUser.zip}}</ion-label>
</ion-list>
<button ion-button (click)="logout()">Logout</button>
</ion-content>
<ng-template #loadingCurrentUser>
Loading...
</ng-template>
Наконец, рассмотрите возможность выполнения этого вызовав ловушке Angular жизненного цикла OnInit вместо конструктора это идеальное место для задач инициализации, таких как вызов базы данных:
export class AccountSettingsPage implements OnInit {
currentUser: User;
constructor(private navCtrl: NavController, private navParams: NavParams, private userProvider: UserProvider) {}
ngOnInit(): void {
this.getCurrentUserDetails("ab@cd.com");
}
getCurrentUserDetails(email: string) {
this.userProvider.getUserByEmail(email)
.then((currentUser: User) => {
this.currentUser = currentUser;
console.log("data: " + JSON.stringify(currentUser));
})
.catch(e => console.error(JSON.stringify(e)));
}
}
Надеюсь, это поможет!