Как я могу обновить значение данных из метода внутри обещания с помощью vue.js? - PullRequest
0 голосов
/ 10 июля 2019

Мой компонентный скрипт:

export default {
  name: "Authenticate",
  data: () => {
    return {
      validationFailed: {}
    };
  },
  methods: {
    validateForm() {
      this.validationFailed = {};
      if (this.createEmail.trim().length === 0) {
        this.validationFailed.createEmailField = "Email cannot be blank. ";
      }

      if (this.createPassword.trim().length === 0) {
        this.validationFailed.createPasswordField =
          "Password cannot be blank. ";
      }

      if (Object.keys(this.validationFailed).length === 0) {
        return true;
      }

      return false;
    },
    handleSubmit() {
      const that = this;
      axios
        .request({
          url: `${process.env.VUE_APP_API_URL}/users`,
          method: "POST",
          data: {
            email: this.createEmail,
            password: this.createPassword
          }
        })
        .then(response => {
          console.log(response);
        })
        .catch(err => {
          that.validationFailed.createEmailField = "something";
        });
    }
  }
};

Но внутри улова, с debugger, я вижу, что значение установлено. Но в моем template, validationFailed не обновляется. Что я делаю не так?

1 Ответ

1 голос
/ 10 июля 2019

Это проблема реактивности Vue. Вам необходимо присвоить this.validationFailed новому объекту. Вы можете попробовать синтаксис ES6 в блоке catch:

that.validationFailed = {
    ...that.validationFailed,
    createEmailField: 'something'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...