Я думаю, у вас должно быть все в порядке:
<script>
...
methods: {
firebase
.auth()
.signInWithEmailAndPassword(this.email, this.password)
.then(data => {
this.$router.push('/app/main/dashboard');
})
.catch(err => {
console.log("not successful")
this.error = err.message;
alert(err.message);
});
}
...
</script>
Вы не можете вызвать catch на this.$router.push
. Возможно, вы могли бы обернуть его в блок try and catch:
try {
this.$router.push('/app/main/dashboard');
} catch (error) {
console.log(error)
}
Но я сомневаюсь, что это будет иметь смысл, поскольку маршрут будет изменен, если он доступен или нет. Я бы предложил создать резервную страницу с ошибкой. Как уже упоминалось здесь .
Vuex подход:
Создайте файл index. js внутри папки магазина.
import * as firebase from 'firebase';
export const state = () => ({})
export const actions = {
signInWithEmailAndPassword({ commit, dispatch }, payload) {
return firebase
.auth()
.signInWithEmailAndPassword(payload.email, payload.password)
.then(data => {
return Promise.resolve(data);
})
.catch(err => {
console.log("not successful")
this.error = err.message;
return Promise.reject(err);
});
}
}
, а затем в вашем компоненте формы:
<script>
...
methods: {
formSubmit() {
this.$store.dispatch("signInWithEmailAndPassword", { email: this.email, password: this.password } )
.then(data => {
this.$router.push('/app/main/dashboard');
});
}
}, ...
</script>