javascript - 用另一种方法达到变量的内容
问题描述
我正在尝试matchData
从 Vue 方法中获取内容。我能够console.log(this.matchData)
,但无法获取其内容。
当我console.log(this.matchData[0].matchScores[0])
按照方法时,readMatchPlayerScoreIds()
我得到:
vue.runtime.esm.js?2b0e:619 [Vue 警告]:挂载钩子错误:“TypeError:无法读取未定义的属性‘matchScores’”
export default {
data() {
return {
matchData: [],
};
},
methods: {
readMatches() {
db.collection("matches")
.get()
.then((queryMatchSnapshot) => {
queryMatchSnapshot.forEach((doc) => {
this.matchData = [];
this.matchData.push({
awayscore: doc.data().awayscore,
homeScore: doc.data().homeScore,
matchScores: doc.data().matchscores,
})
});
console.log(this.matchData[0].matchScores[0])
});
},
readMatchPlayerScoreIds() {
console.log(this.matchData[0].matchScores[0])
}
},
mounted() {
this.readMatches();
this.readMatchPlayerScoreIds();
},
};
解决方案
由于您是从 db异步获取数据,因此在 db 调用完成之前数据将为空。你应该在 Promise 解决后读取数据。(将我的评论重新表述为答案)。
一种方法是从以下位置返回 Promise readMatches
:
export default {
data() {
return {
matchData: [],
};
},
methods: {
readMatches() {
return db.collection("matches")
.get()
.then((queryMatchSnapshot) => {
queryMatchSnapshot.forEach((doc) => {
// this.matchData = []; // <= why would you reset it in each loop?
this.matchData.push({
awayscore: doc.data().awayscore,
homeScore: doc.data().homeScore,
matchScores: doc.data().matchscores,
})
});
console.log(this.matchData[0].matchScores[0])
});
},
readMatchPlayerScoreIds() {
console.log(this.matchData[0].matchScores[0])
}
},
mounted() {
this.readMatches()
.then(() => this.readMatchPlayerScoreIds());
},
};
但这取决于你想在readMatchPlayerScoreIds
方法体中做什么。
另外,请注意不要matchData
在forEach
循环中重置。
推荐阅读
- c - 如何在 C 中将 16 值拆分为两个 8 位值
- intellij-idea - 如何使用 jUnit 测试运行器在 Intellj 中创建新的 Leiningen Clojure 项目?
- python - Python 编译脚本给出“无法加载插件:sqlalchemy.dialects:presto”错误
- excel-formula - 动态验证,但有列
- assembly - MIPS 组装中的空心正方形
- r - 尝试用 4 行表示文件中的 4 个数据框创建单个图形
- python - 将图像更改为 numpy 数组后,我只想导入 1 个通道
- git - 来自mac终端的git命令指向分支而不是master
- centos - 如何使用 Ansible 删除 ufw 中预定义的 mDNS 规则?
- php - php require_once 修改局部变量?