我有几个表单。每个表单都有相同的逻辑(验证、发送...),所以我想创建一个方法来控制表单上的操作。现在我的代码是冗余的,因为我在每个**.vue**文件上都有相同的方法onSubmit()
。
我的HTML:
<div id="app">
<myform-one></myform-one>
<myform-two></myform-two>
</div>
我的JavaScript(main.js-webpack中的条目文件):
import Vue from 'vue';
import Myform1 from './myform1.vue';
import Myform2 from './myform2.vue';
new Vue({
el: '#app',
components: {
myformOne: Myform1,
myformTwo: Myform2
}
});
和VUE组件文件:
我的表单1.vue:
<template>
<div>
<form @submit.prevent="onSubmit">
<input type="text" v-model="fields.fname11" />
<input type="text" v-model="fields.fname12" />
<button type="submit">submit</button>
</form>
</div>
</template>
<script>
let formfields = {
fname11: '',
fname12: ''
};
export default {
data() {
return {
fields: formfields
}
},
methods: {
onSubmit() {
// code responsible for reading, validating and sending data here
// ...
console.log(this.fields);
}
},
}
</script>
以及myform2.vue:
<template>
<div>
<form @submit.prevent="onSubmit">
<input type="text" v-model="fields.fname21" />
<input type="text" v-model="fields.fname22" />
<input type="text" v-model="fields.fname23" />
<button type="submit">submit</button>
</form>
</div>
</template>
<script>
let formfields = {
fname21: '',
fname22: '',
fname23: '',
};
export default {
data() {
return {
fields: formfields
}
},
methods: {
onSubmit() {
// code responsible for reading, validating and sending data here
// ...
console.log(this.fields);
}
},
}
</script>
我如何创建和使用一个公共方法submitForm()
?它的代码应该在哪里(好的实践)?
3条答案
按热度按时间csga3l581#
创建包含以下逻辑的单独文件:
然后在组件内部使用该逻辑
djmepvbi2#
Vue3(我使用Quasar,但我相信它适用于任何框架):
假设你有一个包含许多表单
<Forms />
的父表单:首先创建一个可组合函数
useForms.js
:然后导入到
<Forms />
中:最后,在
<Form />
中:在父级中执行检查功能时,它应该遍历每个表单并检查是否存在任何问题。
fslejnso3#
有一些选项,我最喜欢的是创建一个mixin vue docs mixins
然后在组件中使用该mixin,如下所示:
最后,mixin所拥有的(创建的、方法、数据等)将被合并到使用该mixin的组件中。
因此,实际上您可以像
this.on_submit()
一样访问mixin方法