Javascript 通过方法不传递变量';我不能在vuejs中工作

Javascript 通过方法不传递变量';我不能在vuejs中工作,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我有一个简单的表单,我使用Vue.js和Firebase(带软件包),我有一个方法在Firebase中注册用户,更改displayName值并注销当前用户,然后我在a中注册一些字段,但我需要保存为保存在firestore中而创建的用户的uid,但是我可以在方法createProvider 我的vuejs组件: import firebase from 'firebase/app'; import { db } from "../firebase"; import "

我有一个简单的表单,我使用Vue.js和Firebase(带软件包),我有一个方法在Firebase中注册用户,更改
displayName
值并注销当前用户,然后我在a中注册一些字段,但我需要保存为保存在firestore中而创建的用户的uid,但是我可以在方法
createProvider

我的vuejs组件:

import firebase from 'firebase/app';
import { db } from "../firebase";
import "firebase/auth";

export default {
  data: () => ({
    // item fields
    nameProvider:"",
    enderecoProvider:"",
    numeroProvider:"",
    cityProvider: "",
    distritoProvider: "",
    paisProvider:"",
    complementoProvider: "",
    telefoneProvider: "",
    nomeContatoProvider: "",
    emailProvider: "",
    passwordProvider: "",
    userId: "",
    userIdTemp: "",
  }),

   firestore() {
    return {
      users: db.collection("users"),
    };
  },

  methods: {
    signUp() {
      var that = this;
       firebase.auth().createUserWithEmailAndPassword(this.emailProvider, this.passwordProvider)
        .then((user) => {
     //  HERE I CREATE THE USER USING FIREBASE AUTH AND I'M TRYNG TO GET THE UID FROM THIS AND STORE IN THE this.userId
           
          this.userId = user.user.uid;
          this.authState(); // the method to 
        })
        .catch((error) => {
          console.log("ERRO", error);
        });
    },
     authState() {
      var that = this;
      firebase.auth().onAuthStateChanged(function(user) {
          if (user) {
            // User is signed in.
            user.updateProfile({
                displayName: "2",
              });
                firebase.auth().signOut().then(() =>{
                  that.$swal({
                      icon: "success",
                      title: "Fornecedor criado com sucesso",
                      text: "Por motivos de segurança refaça seu login"
                    }).then((result) => {
                      if (result.isConfirmed) {
                        that.$router.replace('/');
                        location.reload();
                      }
                    })
                })
           console.log(user);
          } else {
            // No user is signed in.
          }
        });
    },

// this method is in button to register in form, i need to get the userId in signIn method to
    createProvider() {
      if (this.$refs.providerForm.validate()) {
         this.signUp();
                 this.$firestore.users.add({
                      nome: this.nameProvider,
                      telefone: this.telefoneProvider,
                      email: this.emailProvider,
                      endereco: this.enderecoProvider,
                      numero: this.numeroProvider,
                      cidade: this.cityProvider,
                      distrito: this.distritoProvider,
                      pais: this.paisProvider,
                      complemento: this.complementoProvider,
                      nomeContato: this.nomeContatoProvider,
                      nivel: "2",
                      uid: this.userId, // i need to save in the method signUp() but i can get the value
                  });
      }
    },
  },
};
我需要将signUp()方法中保存的this.userId值传递给createProvider(),并在firestore中注册。

在代码中使用.bind(this)来访问this。但您无法这样做。或者将这个首先分配给某个变量,在调用函数中可以使用该变量

signUp() {
      var selfVar = this;
       firebase.auth().createUserWithEmailAndPassword(this.emailProvider, this.passwordProvider)       
     .then((user) => {
     //  HERE I CREATE THE USER USING FIREBASE AUTH AND I'M TRYNG TO GET THE UID FROM THIS AND STORE IN THE this.userId
           
          selfVar.userId = user.user.uid;
          selfVar.authState(); // the method to 
        })
        .catch((error) => {
          console.log("ERRO", error);
        });
    }
或者,如果身份验证调用成功,则直接使用异步函数获取用户信息

async signUp() 
{ 
    const user = await firebase.auth().createUserWithEmailAndPassword(this.emailProvider,this.passwordProvider); 
    if(user){
     console.log(user);
    } 
}

在.then()之后添加代码:alert(JSON.stringify(user))这将显示用户变量的内容,从那里,您应该能够为用户id找到正确的变量名(如果方法返回了它)@Sparky我该怎么做?如何调用
createProvider
?您在
createProvider
中看到
this.userId
的值是多少?@tony19 createProvider是一个点击按钮事件,您看到了
console.log(this.userId)的哪些内容
在该函数中?我确实理解,如何将this.userId传递给另一个方法?我尝试了您的代码,出现了错误
错误“bind”未定义没有未定义
您尝试了吗?。然后(user=>(this.userId=user.user.id));此外,我已经更新了.bind位置。希望它现在可以工作。否则,请先将“this”分配给函数外部的某个变量,然后使用该变量。例如
var selfVar=this;
和在函数
selfVar.userId
中,错误现在是
。bind不是函数
`