Я создаю проверку входа в систему в Vue.js, но сообщение об ошибке не отображается, и оно дает мне ошибку:
Свойство или метод «ошибка» не определен в экземпляре, но на него ссылаются во время рендеринга. Убедитесь, что это свойство является реактивным либо в параметре данных, либо для компонентов на основе классов, инициализировав свойство.
Любая помощь?
Шаблон:
<template>
<div class = "container" width = "900">
<div class = "row justify-content-center" style = "margin-top: 10px;">
<div class = "col-5">
<div v-if = "error" class = "alert alert-danger" role = "alert">
{{error}}
</div>
<div class = "card" >
<div class = "card-text">
<div class = "form-group" @keyup.enter = "logItIn">
<input class = "form-control"
v-model = "login.email"
label = "Email"
placeholder = "Email Address"
required
> <br>
<input class = "form-control"
v-model = "login.password"
label = "Password"
type = "password"
placeholder = "Password"
required>
</div>
</div>
<button type = "button" class = "btn btn-secondary" @click='logItIn'>Login</button>
</div>
</div>
</div>
</div>
</template>
Скрипт:
import axios from 'axios'
export default {
data() {
return {
login: {
email:"",
password:"",
error: ""
}
}
},
methods: {
async logItIn() {
try {
axios.post('https://odevin-api.herokuapp.com/login',this.login)
.then(response => {
console.info(response)
let newToken=response.data.response.token;
window.token=newToken;
let user=response.data.response.user; //response
localStorage.setItem('token',newToken);
localStorage.setItem('user',JSON.stringify(user));
window.axios.defaults.params = {api_token:newToken}
// Event.$emit('login',user);
this.$router.push('/');
});
} catch(e) {
this.error = 'invalid user name or password';
}
}
}
}
вы ссылаетесь на {{ error }}
в своем шаблоне, но в вашем объекте данных error
является свойством объекта входа в систему. поэтому vue не может найти его правильно.
либо измените использование в своем шаблоне на {{ login.error }}
, либо определите его в своем объекте данных следующим образом:
data() {
return {
error: '',
login: {
email: '',
password: '',
},
}
}
я пробовал это, но теперь он не показывает сообщение об ошибке, которое я установил «неверное имя пользователя или пароль»
Итак, вы получили ошибку в своем вопросе, теперь вам нужно проверить, правильно ли обновляется error
! вы изменили привязку шаблона или объект данных?
объект данных
Я думаю, что может быть какая-то проблема с функцией logItIn
, вы использовали ключевое слово async
, но я не вижу в нем ключевого слова await
! Я сомневаюсь, что это правильный синтаксис, возможно, блок catch вообще не запускается. прочитайте эту ссылку, возможно, это поможет (только первая часть, которая описывает функцию входа в vue с использованием синтаксиса async ... await
), также вы можете поместить console.info
в блок catch, чтобы увидеть, работает он или нет: stackoverflow.com/questions/65343792 /vue-логин-функция/…
Вы используете его как
error
, но вы определили его какlogin.error
. Возможно, вы хотели переместить его за пределы объектаlogin
вdata
.