我正在使用vuejs / laravel表单来更新用户设置。经过一番挣扎之后,我不再进行验证处理。我正在使用laravels返回验证在错误的输入字段下方添加错误消息。返回的方式要求我以某种方式处理如何“获取”错误。
我的问题是我似乎找不到如何在组件中导入类并从模板中使用它的方法。如您在EditUser.vue中所见,我正在尝试通过导入的类v-text="errors.get('name')"
所以任何人都可以帮助我改变方法或使我正在努力的工作正常进行。
edit.blade.php:
<edit-user-form user-array="{{ $user }}"
route="{{ route('user.update', $user) }}"></edit-user-form>
EditUser.vue:
<template>
<form method="POST" action="update" @submit.prevent="onSubmit">
<input id="name" type="text" name="name" v-model="user.name">
<span class="invalid-feedback" role="alert">
<strong v-text="errors.get('name')"></strong>
</span>
</form>
</template>
<script>
import {Errors} from '../errors.js';
export default {
props: ['userArray', 'route'],
data() {
return {
user: JSON.parse(this.userArray)
}
},
methods: {
onSubmit() {
axios.post(this.route, this.user)
.then(response => alert('Success'))
.catch(error => Errors.record(error.response.data));
}
}
};
</script>
error.js:
export class Errors {
constructor() {
this.errors = {};
}
get(field) {
if (this.erros[field]) {
return this.errors[field][0];
}
}
record(errors) {
this.errors = errors;
}
}
答案 0 :(得分:1)
在由Vue解释时,单个文件组件的template
标记中使用的所有变量基本上都以this
为前缀。因此,为了使某些变量可访问,我们必须将它们附加到当前组件的实例上。
在大多数情况下,简便的解决方案尤其是在本地/很少使用的变量的情况下,是将Errors
类分配给组件的data
选项:
data () {
return {
user: JSON.parse(this.userArray),
errors: new Errors()
}
},
methods: {
onSubmit() {
axios.post(this.route, this.user)
.then(response => alert('Success'))
.catch(error => this.errors.record(error.response.data));
}
}
我在其中放置了new
关键字,因为如果每个组件都将使用它自己的Errors
类实例,则此实现很有意义。
如果目标是在应用程序内共享Errors
类并访问错误包,则可以将其添加到Vue.prototype
并通过this
从任何组件进行访问。 Here是许多有助于创建自定义插件的文章之一。
根据当前实现所要达到的目标,可能有更好的选择,例如mixins或可重复使用的错误/警报组件,可以处理错误响应。