我正在尝试在我的ionic2应用程序中加载一些消息,并将它们存储在SqLite数据库中,以避免多次下载它们。
所以基本上我询问我的Sqlite保存的最后一个ID,然后询问服务器所有比该ID更新的消息,然后用保存的消息填充黑板,直到我达到20条消息(显然只有一个调用)。
所以技术部分:我将所有这些消息放在一个数组中,它应该用*ngFor显示在应用程序中。当我在PC上运行应用程序时,它显示正确(所以逻辑是正确的),但当我在手机上运行应用程序时,就好像*ngFor没有刷新,消息也没有显示。
顺便说一句,并不总是这样。如果我卸载页面,我会看到一段时间的消息(数组最终显示在*ngFor中),如果我再次加载它,它会显示它们(不是因为它们现在被保存了,而是因为我认为它们已经在某个缓存中了)。
答案是:我错过的*ngFor是有限制的吗?如何才能让消息始终显示?我已经将消息限制从100降低到20,但这并没有解决问题。
以下是代码,以及三个承诺:
getMessages(){ this.dbService.getLastMessageId().then((data) => {
let lastId = 0;
if (data.res.rows.length > 0)
lastId= data.res.rows.item(0).Id;
this.http.get(URL+lastId)
.subscribe(data => {
var response = data.json();
let newMessagesCount = response[0].count;
for (let i =1; i<=newMessagesCount; i++)
this.messages.push(response[i]);
if (newMessagesCount <20)
this.dbService.getOldChatMessages(20-newMessagesCount).then((data) => {
if (data.res.rows.length > 0){
let rowsCount = data.res.rows.length;
for (let i=0; i<rowsCount;i++){
let newElement = {
Name: data.res.rows.item(i).Name,
Date: data.res.rows.item(i).mexDate,
Text: data.res.rows.item(i).mexText,
Id: data.res.rows.item(i).Id,
New: 0
};
this.messages.push(newElement);
}
}
//HERE I EXPECT THE ARRAY TO BE READY
if(newMessagesCount>0){
this.dbService.storeNewChatMessages(response);
}
});
});
});}
发布于 2016-12-18 08:42:23
尝试将for循环放在如下所示的区域中:
import { NgZone } from '@angular/core';
export class MyPage {
zone: NgZone;
constructor() {
this.zone = new NgZone({enableLongStackTrace: false});
}
getMessages() {
this.zone.run(() => {
for (let i =1; i<=newMessagesCount; i++) {
this.messages.push(response[i]);
}
});
this.zone.run(() => {
for (let i = 0; i < rowsCount; i++) {
let newElement = {
Name: data.res.rows.item(i).Name,
Date: data.res.rows.item(i).mexDate,
Text: data.res.rows.item(i).mexText,
Id: data.res.rows.item(i).Id,
New: 0
};
this.messages.push(newElement);
}
});
}
}https://stackoverflow.com/questions/41190389
复制相似问题