如何将变量从js文件传递到.vue文件

时间:2020-06-07 14:03:05

标签: javascript firebase vue.js

嘿,对vuejs来说是新手,并且正在使用Firebase进行身份验证。这是我在单独的js文件中的firebase代码。我在这个js文件中包含了所有的变异,状态,操作和获取方法,然后将其调用到不同的组件中

import firebase from "firebase/app";
import "firebase/auth";

export default {
state: {
  loggedInUser:
  localStorage.getItem("userInfo") != null
    ? JSON.parse(localStorage.getItem("userInfo"))
    : null,
  loading: false,
  error: null
},
getters: {
  loggedInUser: state => state.loggedInUser,
  loading: state => state.loading,
  error: state => state.error
},
mutations: {
  setUser(state, data) {
  state.loggedInUser = data;
  state.loading = false;
  state.error = null;
},
setLogout(state) {
  state.loggedInUser = null;
  state.loading = false;
  state.error = null;
},
setLoading(state, data) {
  state.loading = data;
  state.error = null;
},
setError(state, data) {
  state.error = data;
  state.loggedInUser = null;
  state.loading = false;
},
clearError(state) {
  state.error = null;
 }
},
actions: {
  login({ commit }, data) {
    commit("clearError");
    commit("setLoading", true);
    firebase
      .auth()
      .signInWithEmailAndPassword(data.email, data.password)
      .then(user => {
        const newUser = { uid: user.user.uid };
        localStorage.setItem("userInfo", JSON.stringify(newUser));
        commit("setUser", { uid: user.user.uid });
        console.log("userInfo");
      })
      .catch(function (error) {
      localStorage.removeItem("userInfo");
      commit("setError", error);
    });

  firebase.auth().onAuthStateChanged(function (user) {

    if (user) {
      // User is signed in.
      let email = user.email;
    } else {
      // User is signed out.
    }
   });
},
signUserUp({ commit }, data) {
  commit("setLoading", true);
  commit("clearError");
  firebase
    .auth()
    .createUserWithEmailAndPassword(data.email, data.password)
    .then(user => {
      commit("setLoading", false);

      const newUser = {
        uid: user.user.uid
      };
      console.log(newUser);
      localStorage.setItem("userInfo", JSON.stringify(newUser));
      commit("setUser", newUser);

    })
    .catch(error => {
      commit("setLoading", false);
      commit("setError", error);
      localStorage.removeItem("userInfo");
      console.log(error);
    });
},
 signOut({ commit }) {
     firebase
    .auth()
    .signOut()
    .then(
      () => {
        localStorage.removeItem("userInfo");
        commit("setLogout");
      },
      _error => { }
    );
  }
 }
};

我在这样的组件中调用它

import { mapGetters, mapActions, mapState } from "vuex";
export default {
  components: {
  },

  data()  {
    return {,
      email: "",
    };
   },

 computed: {
    ...mapGetters(["getSideBarToggleProperties"]),
    ...mapState(['loggedInUser']) 
  },

  methods: {
    ...mapActions([
    "signOut",
    "login"
    ]),

   getLogin () {
      this.login({ email: this.email });   
   },

然后我使用@click调用方法'getLogin'来显示

<a class="dropdown-item" id="testing">{{loggedInUser}}</a>

2 个答案:

答案 0 :(得分:0)

从js文件中导出电子邮件,然后从脚本标签内的vue组件中导入电子邮件,然后就可以使用。

答案 1 :(得分:0)

这是一种方法:

// messages.js file
const variableToUseInVue = "hello from a js file"
export default { variableToUseInVue }

现在在您的组件中:

// Hello.vue component
<template>
  <div>
    <p>Message: {{ messages.variableToUseInVue }}</p>
    <!-- Message: hello from a js file -->
  </div>
</template>
<script>
  import messages from './messages' // Import from the js location
  export default {
    data: () => ({ messages: messages })
  }
</script>

第二种方法是导出每个变量并使用对象分解:

// messages.js file
export const variableToUseInVue = "hello from a js file"

现在在您的组件中:

// Hello.vue component
<template>
  <div>
    <p>Message: {{ variableToUseInVue }}</p>
    <!-- Message: hello from a js file -->
  </div>
</template>
<script>
  import { variableToUseInVue } from './messages' // Import from the js location
  export default {
    data: () => ({ messages: variableToUseInVue })
  }
</script>

考虑到您的需求,更好的方法是在Vuex中具有登录功能并在其中具有用户信息,这样您就可以在任何地方访问信息。

此外,您可以具有一个登录组件,该组件公开电子邮件变量并运行登录功能,该电子邮件变量将是反应性的,并会在更改时进行更新。