Angular 如何在等待请求的所有Firebase数据全部完成时显示加载状态?
星期五快乐!我只想得到关于如何显示加载的任何建议,如下所示: 等待Firebase数据完全加载时 我试着用Angular 如何在等待请求的所有Firebase数据全部完成时显示加载状态?,angular,typescript,ionic2,loading,Angular,Typescript,Ionic2,Loading,星期五快乐!我只想得到关于如何显示加载的任何建议,如下所示: 等待Firebase数据完全加载时 我试着用 <div *ngIf="!listOfFoodObject"> <img [src]="https://i.stack.imgur.com/7luvR.gif" /> </div> 和我的视图: <ion-list> <ion-item *ngFor="let food of listOfFoodObject">
<div *ngIf="!listOfFoodObject">
<img [src]="https://i.stack.imgur.com/7luvR.gif" />
</div>
和我的
视图:
<ion-list>
<ion-item *ngFor="let food of listOfFoodObject">
<ion-thumbnail item-left (click)="show_item_details(food.menu_name,food.key,food.menu_image,food.description)">
<img src="{{food.menu_image}}">
</ion-thumbnail>
<h2 (click)="show_item_details(food.menu_name,food.key,food.menu_image,food.description)">{{food.menu_name}}</h2>
<p (click)="show_item_details(food.menu_name,food.key,food.menu_image,food.description)">{{food.description}}</p>
<p>
<ion-icon ios="ios-star" md="md-star"></ion-icon>
3.8
</p>
<button ion-button round item-right (click)="show_item_details(food.menu_name,food.key,food.menu_image,food.description)">View sellers</button>
</ion-item>
</ion-list>
{{food.menu{u name}}
{{food.description}
3.8
查看卖家
谢谢
var firebasePromise = new Promise(function(resolve, reject) {
// Do your database tasks, request data
if(data was returned) {
resolve(here you return your data);
}
else {
reject(here you throw an error);
}
});
firebasePromise.then(function() {
// this part deals with the resolved promise
// so you can use your data here
}).catch(function() {
// in here you handle your error that was returned by reject
})
上面这一个是promise的基本示例,它是一个规范,用于标准化AJAX请求,如果您使用nodejs、angularjs或其他库,可能有内置的promise可以使用,如果没有,您可以查找延迟对象,这几乎是promise实现
您做出承诺(firebasePromise),承诺可以被解析(您的数据以异步方式成功返回)也可以被拒绝。firebasePromise在后台启动并工作,完成后将激发then方法,并使您能够对已解析或已拒绝的返回值执行操作。这是一个过度就业,但你可以得到它的要点
上面这一个是promise的基本示例,它是一个规范,用于标准化AJAX请求,如果您使用nodejs、angularjs或其他库,可能有内置的promise可以使用,如果没有,您可以查找延迟对象,这几乎是promise实现
您做出承诺(firebasePromise),承诺可以被解析(您的数据以异步方式成功返回)也可以被拒绝。firebasePromise在后台启动并工作,完成后将激发then方法,并使您能够对已解析或已拒绝的返回值执行操作。这是一个过度配置,但您可以了解其要点。根据您的Firebase代码,您可能已将listOfFoodObject初始化为空数组
listOfFoodObject =[];
但空数组是“truthy”值,这就是为什么在下面的HTML代码中*ngIf条件为false,图像未显示:
<div *ngIf="!listOfFoodObject">
<img [src]="https://i.stack.imgur.com/7luvR.gif" />
</div>
您应该在
forEach
循环之前将listofoodobject
初始化为空数组。根据Firebase代码,您可能已将listofoodobject初始化为空数组
listOfFoodObject =[];
但空数组是“truthy”值,这就是为什么在下面的HTML代码中*ngIf条件为false,图像未显示:
<div *ngIf="!listOfFoodObject">
<img [src]="https://i.stack.imgur.com/7luvR.gif" />
</div>
您应该在
forEach
循环之前将listofoodobject
初始化为空数组。如上所述
使用mnemosdev发布的代码,你会没事的
但是这里有一个关于你在做什么的问题,你是否在显示加载的gif时隐藏了页面的其余内容?因为用户可以单击页面中的任何内容,甚至可以返回而没有响应,所以这是一个糟糕的用户体验
创建一个自定义组件,这样当您要请求某个内容时,您可以调用一个表示loding的方法(不带*ngIf内容),当您结束它时,无论是否有数据,您都可以调用隐藏加载的方法
这不是对你的问题的有效回答,只是认为你应该知道。如上所述,使用承诺 使用mnemosdev发布的代码,你会没事的 但是这里有一个关于你在做什么的问题,你是否在显示加载的gif时隐藏了页面的其余内容?因为用户可以单击页面中的任何内容,甚至可以返回而没有响应,所以这是一个糟糕的用户体验 创建一个自定义组件,这样当您要请求某个内容时,您可以调用一个表示loding的方法(不带*ngIf内容),当您结束它时,无论是否有数据,您都可以调用隐藏加载的方法
这不是对您的问题的有效回答,但只是认为您应该知道。您是否尝试过使用承诺并等待解决,而在未解决时使用“等待”图像?实际上,任何ajax方法都可以;将“waiting icon”放在活动html元素中,并在ajax调用导致成功时将属性display设置为none承诺并等待我不知道如何使用它(^ ^)。你能给我看一个示例代码吗?那么,它解决了你的问题吗?:)您是否尝试过使用承诺并等待解决,而在未解决时使用“等待”图像?实际上,任何ajax方法都可以;将“waiting icon”放在活动html元素中,并在ajax调用导致成功时将属性display设置为none承诺并等待我不知道如何使用它(^ ^)。你能给我看一个示例代码吗?那么,它解决了你的问题吗?:)好的,谢谢,让我先试试。稍后我会给出反馈。好的,谢谢,让我先试试。稍后我会给出反馈。