Vue: проверка входа не работает в моем коде

Я создаю проверку входа в систему в 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, но вы определили его как login.error. Возможно, вы хотели переместить его за пределы объекта login в data.

Dan 18.12.2020 19:08
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
1
1
588
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы ссылаетесь на {{ error }} в своем шаблоне, но в вашем объекте данных error является свойством объекта входа в систему. поэтому vue не может найти его правильно.

либо измените использование в своем шаблоне на {{ login.error }}, либо определите его в своем объекте данных следующим образом:

data() {
  return {
    error: '',
    login: {
      email: '',
      password: '',
    },
  }
}

я пробовал это, но теперь он не показывает сообщение об ошибке, которое я установил «неверное имя пользователя или пароль»

sara97 18.12.2020 19:11

Итак, вы получили ошибку в своем вопросе, теперь вам нужно проверить, правильно ли обновляется error! вы изменили привязку шаблона или объект данных?

hamid niakan 18.12.2020 19:14

объект данных

sara97 18.12.2020 19:16

Я думаю, что может быть какая-то проблема с функцией logItIn, вы использовали ключевое слово async, но я не вижу в нем ключевого слова await! Я сомневаюсь, что это правильный синтаксис, возможно, блок catch вообще не запускается. прочитайте эту ссылку, возможно, это поможет (только первая часть, которая описывает функцию входа в vue с использованием синтаксиса async ... await), также вы можете поместить console.info в блок catch, чтобы увидеть, работает он или нет: stackoverflow.com/questions/65343792 /vue-логин-функция/…

hamid niakan 18.12.2020 19:22

Другие вопросы по теме