2017-02-21 18 views
1

Я пытаюсь использовать VueJS и Axios, чтобы сделать HTTP-запрос к серверу Laravel, чтобы получить JSON, а затем использовать JSON для обновления свойства errorMessage на моем компоненте ,Невозможно установить свойство внутри обещания Axios в Vue JS

  Axios.post('/api/login', { 
       email: this.email, 
       password: this.password 
      }).then((response) => { 
       this.errorMessage = response.message; 
      }).catch((error) => { 
       console.error(error); 
      }) 

Проблема заключается в том, что он не в состоянии ссылаться this.errorMessage по какой-то причине, я делаю что-то здесь не так? Я правильно делаю HTTP-запрос, и ответ JSON возвращается так же, как ожидалось, если i console.log, но когда я пытаюсь манипулировать this.errorMessage, он говорит, что он не определен, хотя я уже с успехом использовал его в другом месте ...

Вот весь код для этого компонента

export default { 
    methods: { 
     submitForm: function(e) { 
      e.preventDefault(); 

      Axios.post('/api/login', { 
       email: this.email, 
       password: this.password 
      }).then((response) => { 
       debugger; 
       this.errorMessage = response.data.message; 
      }).catch((error) => { 
       console.error(error); 
      }); 
     } 
    }, 
    data: function() { 
     return { 
      errorMessage: null, 
      email: null, 
      password: null 
     } 
    }, 
    components: { 
     'error': Error 
    } 
} 

РЕШЕНИЯ:

оригинального запрос является правильной, жиром функция стрелки должна сохранить значение this, вопрос был с отладчиком Chrome, который показал значение мне как undefined даже th они не были ... Извините за глупый вопрос, я надеюсь, что это поможет другим людям столкнуться с такой проблемой.

+0

Это проблема контекста. Показать еще код. –

+0

@JonatasWalker Я обновил вопрос со всем кодом для этого конкретного компонента. –

+0

Возможный дубликат [Vue axios scope scope не привязан к текущему компоненту] (https://stackoverflow.com/questions/41754346/vue-axios-promise-scope-is-not-binding-to-current-component) –

ответ

6

Axios.post ближе функция поэтому свойство определить в нем выглядит как частные под более функции.

Вы должны определить переменную вне ближе, как это:

//this will pick your data. 
let self = this; 


Axios.post('/api/login', { 
    email: this.email, 
    password: this.password 
    }).then((response) => { 
    self.errorMessage = response.message; 
      }).catch((error) => { 
       console.error(error); 
      }) 

Кроме того, если response.message не определен, то используйте response.body.message или возвращающегося переменную из Laravel.

+0

Yup. вот это @MandeepGill спасибо :) По какой-то причине отладчик в хроме продолжает говорить, что он «неопределен», когда я наводил «self.errorMessage», и это полностью отбросило меня, потому что я пробовал это раньше. Но, несмотря на то, что Chrome говорит, что это 'undefined', он работает независимо. –

+0

Вы приветствуете @ JoãoSerra –

+0

Возможно, у вас есть кэш, в Chrome есть вкладка сети в инструментах разработчика, чтобы открыть эту вкладку, чтобы отключить кеш и открыть инструменты разработчика, а затем обновить и сообщить мне, если все еще эта проблема. –

0

данных ОТКЛИКА доступен под data собственности:

this.errorMessage = response.data.message; 
+0

Привет, Джозеф, проблема в том, что это 'this.errorMessage', который не определен, поэтому он устанавливает неопределенную строку, поэтому ничего не делает. Я не совсем понимаю, почему this.errorMessage не определен, так как я использую функции толстых стрелок ... я мог бы смутить что-то здесь. –

+0

@ JoãoSerra - это 'undefined', потому что' response.message' 'undefined'. Вместо этого используйте 'response.data.message'. –

+0

Я сделал, я использую 'debugger' для проверки значений, которые больше не определены, но проблема остается, например ** Jonatas Walker ** заметил, что это проблема контекста, я точно не уверен, как могу почини это. –

 Смежные вопросы

  • Нет связанных вопросов^_^