Axios 和 Vue.js 呈现表单提交错误

Axios and Vue.js render form submission errors

我正在尝试使用 vue.js 和 axios 在表单提交失败时呈现从服务器返回的错误消息。

组件:

<template>
  <div>
    <p>Sign Up</p>

    <form v-on:submit.prevent="onSubmit">
      <div>
        <label>Email:</label>
        <input type="text" name="user[email]" ref="user_email" />
      </div>
      <div>
        <label>Password:</label>
        <input type="text" name="user[password]" ref="user_password" />
      </div>
      <div>
        <input type="submit"/>
      </div>
    </form>

    <ul v-if="errors && errors.length">
        {{ errors }}
    </ul>
  </div>
</template>

<script>
  import axios from 'axios'

  export default {
    data() {
      return {
        errors: []
      }
    },
    methods: {
      onSubmit: function () {
        axios.post('/users', {
          user: {
            email: this.$refs.user_email.value,
            password: this.$refs.user_password.value
          }
        })
        .then(response => {
        })
        .catch(error => {
          console.log(error.response.data.errors)
          console.log(error.response.status)
          this.errors = error.response.data.errors
        })
      }
    }
  }
</script>

CONSOLE.LOG 错误

{email: Array(1), password: Array(1)}
422

如您所见,我正在尝试呈现 {{ errors }} 对象只是为了开始,但即使服务器发回一些错误,页面上也没有显示任何错误?

澄清一下。如果存在,我如何获取从服务器返回的表单验证并将它们显示在表单上?使用 Vue.js 和 Axios。感谢您的帮助!

我不确定这是否是最惯用的处理方式,但这至少会将消息发送到以下表单:

    .catch(error => {
      this.errors.push(error.response.data.errors)
    })

仔细查看您的控制台日志以获取响应数据:

{email: Array(1), password: Array(1)}

现在看看你的 v-if 指令:

<ul v-if="errors && errors.length">

如您在控制台日志中所见,您的响应没有 length 属性,因此 div 不会显示。您将 errors 初始化为一个空数组,但您的响应是 return 对象,而不是数组。

您要么需要修复对 return 错误数组的服务器调用,要么更改 v-if 指令并省略对 length 属性 的检查。