我目前正在开发一个应用程序使用Ionic 3和Firebase。我使用离子型可选(您可以看到我的斯塔克闪电战)让用户从我的firebase数据库数组中选择一个选项,并将选择的选项返回给用户的id。
我已经完成了所有的工作,除了离子选择不是读取检索到的数组形式的火基。
我使用以下代码检索数组:
this.itemsRefdiag = afg.list('medicalhx');
this.items = this.itemsRefdiag.snapshotChanges().map(changes => {
return changes.map(c => ({ ...c.payload.val() }));
});
const dgRef = this.afg.database.ref();
dgRef.child('medicalhx').orderByChild('name').on('value', snapshot => { this.snapshot2 = JSON.stringify(snapshot).replace(/"[0-9]":{"name":|{|}/g, ""); })我的console.log结果是:
"Hyperthyroidism","Hypothyroidism","Diabetes Type 1","Diabetes Type 2"然而,当使用离子型可选的private diagnoses: Diagnosis[] = [this.snapshot2]时,我会得到“未定义”选项。但是,当我手动输入private diagnoses: Diagnosis[] = ["Hyperthyroidism","Hypothyroidism","Diabetes Type 1","Diabetes Type 2"]时,它可以工作。我还尝试使用以下代码解析JSON数组:
this.itemsRefdiag = afg.list('medicalhx');
this.items = this.itemsRefdiag.snapshotChanges().map(changes => {
return changes.map(c => ({ ...c.payload.val() }));
});
const dbRef = this.afg.database.ref();
dbRef.child('medicalhx').orderByChild('name').on('value', snapshot =>
{ let snapshot3 = JSON.stringify(snapshot).replace(/"}/g, `"`);
let snapshot4 = snapshot3.replace(/"[0-9]":{"name":|{|}|"/g, "");
this.snapshot2 = snapshot4.split(",");
});我的console.log生成一个具有单独字符串(数组)的对象:
["Hyperthyroidism","Hypothyroidism","Diabetes Type 1","Diabetes Type 2"]然而,离子选择仍然没有读到这一点,我得到了未定义的错误。我对数组做错了什么有什么想法吗?
编辑
它实际上第二次工作,但是控制台错误第一次弹出,我相信这是因为它没有等待数组结果第一次弹出。是否有一种方法来添加等待时间直到数组加载?
发布于 2018-10-10 21:04:00
问题中列出的第二段代码(将其转换为真正的数组)工作正常,但需要加载时间,因此会弹出控制台错误。通过按照这个stackblitz实现异步搜索,我设法解决了加载时间问题。
https://stackoverflow.com/questions/52746729
复制相似问题