代码我看了,主要问题是
// Sign.vue
watchEffect((reset) => {
console.log(signsInfos.value) // 这里出现了空对象 {} 造成后面报错了
const detailMonth = ((signsInfos.value.detail as {[index: string]: unknown})[toZero(month.value)] as {[index: string]: unknown});
})
问题出现在没有获取到数据就进入了页面,说明路由写的有问题
beforeEnter (to, from , next) {
const usersInfos = (store.state as StateAll).users.infos
const signsInfos = (store.state as StateAll).signs.infos
// console.log(usersInfos)
// console.log('signsInfos:',signsInfos)
if (_.isEmpty(signsInfos)) {
store
.dispatch('signs/getTime', { userid: usersInfos._id })
.then((res) => {
// console.log(res.data)
if (res.data.errcode === 0) {
store.commit('signs/updateInfos', res.data.infos)
next()
}
})
}
else{
next()
}
}
这是我简单改过的,之前在异步没结束的时候,就调用next()了,这是不对的。
需要异步结束后再调用next()才行。
还有我视频中的源码后面换成了async/await写法,也是保证了异步后再触发next()
不知道可以理解不
有问题可以留言给我