【发布时间】:2021-09-25 09:27:08
【问题描述】:
我在我的函数中导入了一个当前用户可组合,但是当我尝试访问用户对象的任何属性时它返回未定义。您能帮帮我吗,我是 Vue 新手?
这是我在其中调用用户属性的模板。
<template>
<p>Process Payroll</p>
<h1>{{ user.displayName }} </h1>
<h1>{{ docs }} </h1>
</template>
<script>
import getUser from '@/composables/getUser'
import { ref, onMounted } from 'vue'
import { projectFirestore, projectAuth } from '@/firebase/config'
import { useRouter, useRoute } from 'vue-router'
export default {
setup() {
const { user } = getUser();
const lastName = ref("");
const firstName = ref("");
const docs = ref([]);
const returnUser = async () => {
const res = await projectFirestore
.collection("users")
.where("displayName", "==", user.displayName)
.get();
if (!error.value) {
// check your response here.
console.log(res);
const doc = res.filter((userObj) => {
if (user.displayName === userObj.data().displayName) {
return user.lastName;
}
});
docs.value = doc;
}
};
onMounted(returnUser)
return { user, docs, returnUser};
},
}
</script>
User.displayName 在我的 returnUser 函数中未定义,但可以显示在顶部的模板中。如何在 returnUser 函数中访问 user.displayName 属性?
可组合:
import { ref } from 'vue'
import { projectAuth } from '../firebase/config'
// refs
const user = ref(projectAuth.currentUser)
// auth changes
projectAuth.onAuthStateChanged(_user => {
console.log('User state change. Current user is:', _user)
user.value = _user
});
const getUser = () => {
return { user }
}
export default getUser
【问题讨论】:
-
似乎您可能在
projectAuth回调更新用户之前调用了returnUser。一种解决方案是使用像watch(()=>user, () => returnUser())这样的手表。如果您正在处理的组件有父组件,那么另一种选择是让用户进入父组件并在此组件上使用v-if="user"并将用户作为道具传递给组件,以便仅创建它当用户可用而不是之前。 -
你是否建议我这样包含它,因为这也不起作用:onMounted(watch(()=>user, () => returnUser())) @InvisibleGorilla
-
直接在
setup()中使用手表,而不是在onMounted中使用。因此,在const { user } = getUser();之后的任何时间设置中使用watch(()=>user, () => returnUser())。 -
这样做时出现参考错误“ReferenceError:未定义错误”。如何继续从 firebase 发起内容请求。现在我没有看到任何事情发生。我想做的就是通过引用当前用户的 displayName 来显示来自 firebase 的姓氏和名字。有没有一种更简单的方法可以从数据库中检索姓氏和名字,或者有任何关于如何以不同方式获取姓氏和名字的想法?我在注册时将姓氏和名字与显示名称一起存储。
标签: vue.js vue-component