Javascript 将Firestore数据添加到DataTable
我试图从Firestore数据库将数据加载到dataTable中,但不起作用。是否有其他方法将数据从firestore推送到阵列Javascript 将Firestore数据添加到DataTable,javascript,datatables,google-cloud-firestore,Javascript,Datatables,Google Cloud Firestore,我试图从Firestore数据库将数据加载到dataTable中,但不起作用。是否有其他方法将数据从firestore推送到阵列 $(文档).ready(函数(){ $('#pageName').html('Dashboard'); $('#pageName li').html('Dashboard'); var数据集=[]; x=1 设db=firebase.firestore(); db.collection(“仓库”).where(“useremail”),“==”,firebase.au
$(文档).ready(函数(){
$('#pageName').html('Dashboard');
$('#pageName li').html('Dashboard');
var数据集=[];
x=1
设db=firebase.firestore();
db.collection(“仓库”).where(“useremail”),“==”,firebase.auth().currentUser.email).get().then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
dataSet[x][1]=doc.data().name;
数据集[x][2]=doc.data().useremail;
数据集[x][3]=文档数据()地址;
x++
});
});
$('#示例')。数据表({
数据:数据集,
栏目:[
{标题:“姓名”},
{标题:“地址”},
{标题:“用户电子邮件”}
]
});
});
数据从Firestore异步加载。您可以通过一些console.log
语句最好地了解这对程序的影响:
console.log("Before running query");
db.collection("warehouses").where("useremail","==",firebase.auth().currentUser.email).get().then(function(querySnapshot) {
console.log("Got data");
});
console.log("After running query");
运行此代码时,您将获得以下输出:
在运行查询之前
运行查询后
得到数据
这可能不是您期望的输出顺序。但它完全解释了代码不起作用的原因:在调用$('#示例').DataTable({data:dataSet,…
时,数据尚未加载
由于数据是从Firebase异步加载的,因此需要访问myst数据的任何代码都应该在
然后回调中,或者从那里调用
因此,最简单的修复方法是从回调中填充数据表:
db.collection("warehouses").where("useremail","==",firebase.auth().currentUser.email).get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
dataSet[x][1] = doc.data().name;
dataSet[x][2] = doc.data().useremail;
dataSet[x][3] = doc.data().address;
x++
});
$('#example').DataTable( {
data: dataSet,
columns: [
{ title: "Name" },
{ title: "Address" },
{ title: "User email" }
]
});
});
谢谢你,弗兰克
这是工作代码。
(没有按钮就无法工作,所以我添加了一个)
获取仓库
函数getDatainTable(){
设db=firebase.firestore();
var数据集=新数组();
var i=1;
db.collection(“仓库”).where(“useremail”),“==”,firebase.auth().currentUser.email).get().then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
push([doc.data().name,doc.data().useremail]);
i=i+1;
});
$('#示例')。数据表({
数据:数据集,
栏目:[
{标题:“姓名”},
{标题:“电子邮件”}
]
} );
});
}
$(文档).ready(函数(){
$('#warehousesGetDataBTN')。单击(函数(){getDatainTable()});
});
如果Firestore中的表中添加了一条新记录,此方法是从表中提取所有记录,还是仅提取新记录并将其附加到datatable?它将添加所有记录。
<button type="button" id="warehousesGetDataBTN">Get Warehouses</button>
<table id="example" class="display" width="100%"></table>
<script>
function getDatainTable() {
let db = firebase.firestore();
var dataSet = new Array();
var i=1;
db.collection("warehouses").where("useremail","==",firebase.auth().currentUser.email).get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
dataSet.push([doc.data().name, doc.data().useremail]);
i=i+1;
});
$('#example').DataTable( {
data: dataSet,
columns: [
{ title: "Name" },
{ title: "Email" }
]
} );
});
}
$(document).ready(function(){
$( '#warehousesGetDataBTN' ).click(function(){getDatainTable()});
});
</script>