作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试访问 Vue.prototype.$firebase
的全局对象在 main.js
中声明
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import VueTailwind from "vue-tailwind";
import { FirebaseApp } from "@/firebase/firebase";
//Style
import "@/assets/styles/app.css";
import settings from "@/assets/styles/Tailwind.js";
FirebaseApp.auth().onAuthStateChanged((user)=>{
Vue.prototype.$user = user;
})
//Vue
Vue.config.productionTip = false;
Vue.use(VueTailwind, settings);
Vue.prototype.$firebase = FirebaseApp;
new Vue({
router,
render: h => h(App)
}).$mount("#app");
内部
Login
成分
<script>
export default {
name: "Login",
mounted: function () {
this.submit();
},
methods: {
submit() {
let login = document.getElementById("login");
login.addEventListener(
"submit",
function (event) {
event.preventDefault();
const email = login.email.value;
const password = login.password.value;
this.$firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then((user) => {
console.log(user)
this.$router.replace('/')
})
.catch((error) => {
console.log(error);
});
},
true
);
},
},
};
</script>
但我得到
TypeError: Cannot read property 'auth' of undefined
,同
this.$router
.
.addEvenListener
之外实例化对象打印效果很好,让我可以通过
let signIn
访问,但这不是我想要的行为,相反,我想在
login
之间“自动”路由和一个
dashboard
在
onAuthStateChange
通过使用 Vue.prototype.$firebase 而不是本地实例化进行登录:
<script>
export default {
name: "Login",
mounted: function () {
this.submit();
},
methods: {
submit() {
let login = document.getElementById("login");
let signIn = this.$FirebaseApp;
let onLogin = this.$router;
login.addEventListener(
"submit",
function (event) {
event.preventDefault();
const email = login.email.value;
const password = login.password.value;
signIn
.auth()
.signInWithEmailAndPassword(email, password)
.then((user) => {
console.log(user)
onLogin.replace('/')
})
.catch((error) => {
console.log(error);
});
},
true
);
},
},
};
</script>
访问
Vue.prototype.$firebase
的正确方法是什么?为什么它有这样的范围限制?
最佳答案
避免使用 function()
内部组件回调并使用 arrow functions反而。function
创建自己的 this
上下文,以便 this
将不再引用组件,但箭头函数使用周围的 this
语境:
login.addEventListener(
"submit",
(event) => { // Changed to arrow function
... // Now you can access `this.$firebase`
},
true
);
关于javascript - 如何在 .addEventListener 中访问 Vue.prototype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66282275/
我是一名优秀的程序员,十分优秀!