You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中从Firebase文档数自动设置v-text-field值遇NaN问题

问题原因分析

你的countLastItem方法里,Firebase的db.collection().get()是异步操作,当前方法没有返回任何值(默认返回undefined),你直接同步调用var b = this.countLastItem()时,b是undefined,转成Number就会得到NaN。虽然控制台能打印出querySnapshot.size,但那是异步回调里的内容,和方法返回值无关。

修复步骤

1. 修正countLastItem方法,返回Promise

把方法改成返回Promise,才能获取到异步操作的结果:

countLastItem() {
  // 返回Firebase查询的Promise
  return db.collection("Kontrolne naloge").get().then(querySnapshot => {
    console.log(querySnapshot.size);
    return querySnapshot.size; // size本身是数字类型,无需转Number
  });
}

2. 正确调用异步方法

异步操作不能直接同步赋值,需要用async/await或者.then()处理:

方式一:使用async/await(推荐,代码更直观)

在调用方法前加async,用await获取结果后赋值给ID:

async fetchAndSetID() {
  const count = await this.countLastItem();
  this.ID = count + 1; // 直接给v-model绑定的变量赋值
  console.log(this.ID);
}

在组件生命周期(比如mounted)里调用这个方法:

mounted() {
  this.fetchAndSetID();
}

方式二:使用.then()回调

如果不想用async/await,也可以用链式调用:

this.countLastItem().then(count => {
  this.ID = count + 1;
  console.log(this.ID);
});

3. 模板代码无需修改

你的v-text-field已经绑定v-model="ID",只要ID赋值正确,禁用的输入框会自动显示对应值。

额外注意事项

直接用集合文档总数+1作为ID存在并发冲突风险:如果两个用户同时加载页面,会拿到相同的count值,添加文档时会生成重复的ID_Naloge。如果需要唯一自增ID,更可靠的方式是:

  • 使用Firebase自动生成的文档ID(add()方法返回的ID)
  • 单独维护一个计数器文档,用事务更新计数器来获取唯一自增值
完整代码片段示例
// 修正后的countLastItem方法
countLastItem() {
  return db.collection("Kontrolne naloge").get().then(querySnapshot => {
    return querySnapshot.size;
  });
}

// 组件挂载时获取并设置ID
async mounted() {
  const count = await this.countLastItem();
  this.ID = count + 1;
}

// 提交方法保持不变
submit() {
  this.snackbar = true
  const project = {
    ID_Naloge: Number(this.ID),
    Kriterij_FK: Number(this.Kriterij),
    Letnik_FK: Number(this.Letnik),
    Naslov: this.Naslov,
    Poglavje_FK: Number(this.Poglavje), 
    Predmet_FK: Number(this.Predmet),
    Rešitev_FK: Number(this.Rešitev),
    Stopnja_Težavnosti_FK: Number(this.Stopnja),
    Točke: Number(this.Točke),
  }
  db.collection('Kontrolne naloge').add(project).then(() => {
    console.log(this.ID)
  })
  this.resetForm();
}

内容的提问来源于stack exchange,提问作者Jaka Podlogar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:30:42