Глобальный улов для отправки форм в Vue.js 2.0

#vuex #vue.js #vuejs2

#vuex #vue.js #vuejs2

Вопрос:

В моем приложении много форм с повторяющимися действиями…

 <form @submit.prevent="save" novalidate 
   ...
  

И метод сохранения ..

 save () {
   ...
   return this.saveEvent(payload)
      .then(() => { self.resetForm() })
      .catch(resp => { 
         if (resp.status === 400) {   
           // verry repetitive task!!
         }
      })
  

Обратите внимание на .catch(resp => { ... })

Во всех формах в моем приложении мне нужно поместить этот улов для обработки полей формы и ответа сервера.

Итак, мой вопрос в том, как обрабатывать повторяющиеся задачи catch в Vue.js ? Как создать директиву или компонент, и все мои формы будут использовать компонент, который будет обрабатывать поля ответа сервера и формы только в одном месте.

Пробовал

Я создаю директиву с именем v-catch-errors

 <form @submit.prevent="save" novalidate v-catch-errors
   ...
  

Но как обрабатывать действия ajax в этой директиве?

Комментарии:

1. Ваш вопрос не очень понятен.

2. @SadoOgie Я редактирую свой вопрос

Ответ №1:

.then() и .catch() — это обе функции, поэтому я бы просто создал новый метод с вашим повторяющимся кодом. Что-то вроде:

 methods: {
  save () {
    var self = this
    return this.saveEvent(payload)
      .then(() => { self.resetForm() })
      .catch(resp => { 
        if (resp.status === 400) {
          self.repetitiveTask()
        }
      })
  },
  repetitiveTask () {
    // verry repetitive task!!
  }
}
  

Я сделал var self = this так, чтобы вы могли вызывать repetitiveTask() метод в другой области.