无法在Vue js变量中赋值[重复]

Posted

技术标签:

【中文标题】无法在Vue js变量中赋值[重复]【英文标题】:Unable to assign value in Vue js Variable [duplicate] 【发布时间】:2021-01-04 10:40:22 【问题描述】:

当我分配从 firebase 集合中获得的值时,它给了我以下错误。

获取文档时出错:TypeError:无法设置未定义的属性“电子邮件” 在 eval (Profile.vue?5a88:68)

下面是我的代码。

import firebase from 'firebase';
import fb from "@/firebase";
export default 
  name: 'Upload',
  data()
    return
        bio: '',
        name: '',
        email: '',
        imageData: null,
        picture: 'http://ssl.gstatic.com/accounts/ui/avatar_2x.png',
        uploadValue: 0
    
  ,
  created() 
    this.setUsers();
  ,
  methods:
    setUsers: () => 
      var userRef = fb.collection("users").doc(firebase.auth().currentUser.uid);
      userRef.get().then(doc => 
        this.email = doc.data().email; 
      ).catch(function(error) 
          console.log("Error getting document:", error);
      );
    ,
 

为什么会出现这种错误,我该如何解决?

【问题讨论】:

问题似乎不是vue,而是js问题。检查这一行this.email = doc.data().email;。尝试控制台记录doc.data()doc.datadoc。我已经使用了一段时间的 firebase,但它与您尝试访问的密钥有关 setUsers: () => 应该是setUsers() (声明方法时不要使用箭头函数) 【参考方案1】:

这将失去他在 firebase 回调函数中的作用域。

您必须将 this 对象分配给某个变量,然后您才能在 firebase 回调中使用它。

setUsers: () => 
  const instance = this
  var userRef = fb.collection("users").doc(firebase.auth().currentUser.uid);
  userRef.get().then(doc => 
    instance.email = doc.data().email; 
  ).catch(function(error) 
      console.log("Error getting document:", error);
  );
,

【讨论】:

仍然报同样的错误。 应该可以了。请发布您的错误 获取文档时出错:TypeError:无法在 eval (Profile.vue?5a88:69) 处设置未定义的属性“电子邮件”【参考方案2】:

您可以尝试控制台 instance.email 吗?

userRef.get().then(doc => 
console.log(instance.email)
)

它应该显示一个空字符串。如果它未定义,那么这就是错误的来源。

如果它不是未定义的,那么你应该检查doc.data().email是否存在。

【讨论】:

以上是关于无法在Vue js变量中赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

freemarker 取得文本框内容赋值给一个变量, 怎么实现?

无法为JavaScript中的对象变量赋值[重复]

无法在 Vue.js 中设置未定义的属性“产品”[重复]

C# 类声明一个数组字段,无法赋值,说变量在声明前无法使用

Vue.js - 无法读取未定义的属性“推送”[重复]

为啥vue-cli打包后,存放vue实例的变量app被删除了?(其他js文件无法访问到app变量)