element複数のフォーム検証の実装
プロジェクトの中で、フォームの検査によく出会います。単一のフォームの検査はelementの公式文書を確認できます。詳しい紹介があります。ここで私は実際のプロジェクトの中で複数のフォームに出会ったことを共有して、同時に検証と私の解決方法を行います。皆さんのメッセージを歓迎します。一緒に関連技術を検討します。よろしくお願いします。
ここでは主にPromiseを使って解決します。
Promise方法について例を挙げて抽象的に理解する:
週末に鍋を食べたいです。Aさんに電話して、鍋料理が全部揃いました。海産物が来たら、少し持ってきてください。それから電話して友達のBさんを探して、私の鍋に来てください。海産物があります。肉が少し少ないです。来る時に持ってきてください。友達のC:ここに来てください。鍋料理は全部できました。お酒がもう少しで来たら、全部で何本ですか?もう一つの鍋の材料が足りません。携帯電話で電話してください。Dさん、仕事に来てください。どのようにいくつかがあります。この電気ストーブはあまりよくないです。何でも用意しました。電気ストーブを持ってきてください。
鍋を食べるということは、いいことになります。
でも、このことは。ずっとうまくいかないです。来られない人もいるでしょう。この鍋が来ないと食べられなくなります。
実際には、複数のフォームの検証は、このフォームとほぼ同じですが、すべてのフォームを確認してください。もしみんなが合格したら、嬉しいです。もし一つの検証が失敗したら、申し訳ございません。ユーザーに教えて、正しく記入してください。
Promiseを通じて、各フォームに対して問い合わせ検査を行います。結果に関わらず、先にPromise.allの中に入って、すべてのフォームの問い合わせが終わるのを待っています。逆に、catchで失敗応答を実行すればOKです。
ここでは主にPromiseを使って解決します。
Promise方法について例を挙げて抽象的に理解する:
週末に鍋を食べたいです。Aさんに電話して、鍋料理が全部揃いました。海産物が来たら、少し持ってきてください。それから電話して友達のBさんを探して、私の鍋に来てください。海産物があります。肉が少し少ないです。来る時に持ってきてください。友達のC:ここに来てください。鍋料理は全部できました。お酒がもう少しで来たら、全部で何本ですか?もう一つの鍋の材料が足りません。携帯電話で電話してください。Dさん、仕事に来てください。どのようにいくつかがあります。この電気ストーブはあまりよくないです。何でも用意しました。電気ストーブを持ってきてください。
鍋を食べるということは、いいことになります。
でも、このことは。ずっとうまくいかないです。来られない人もいるでしょう。この鍋が来ないと食べられなくなります。
実際には、複数のフォームの検証は、このフォームとほぼ同じですが、すべてのフォームを確認してください。もしみんなが合格したら、嬉しいです。もし一つの検証が失敗したら、申し訳ございません。ユーザーに教えて、正しく記入してください。
Promiseを通じて、各フォームに対して問い合わせ検査を行います。結果に関わらず、先にPromise.allの中に入って、すべてのフォームの問い合わせが終わるのを待っています。逆に、catchで失敗応答を実行すればOKです。
const formName = ['tableForm1', 'tableForm2', 'tableForm3']
const validates = (item) => {
return new Promise((resolve, reject) => {
if (!this.$refs[item]) {
resolve()
return false
}
this.$refs[item].validate((valid) => {
if (valid) {
resolve()
} else {
reject(new Error(' '))
}
})
})
}
Promise.all(formName.map(item => validates(item))).then(() => {
console.log(' ')
}).catch(() => {
console.log(' ')
})
}
}
最後に、ここに完全なコードを貼り付けます。
<div class="home">
<el-form :model="tableForm1" ref="tableForm1" :rules="rules1" label-width="100px" >
<el-form-item label=" " prop="price">
<el-input v-model.number="tableForm1.price" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-form :model="tableForm2" ref="tableForm2" :rules="rules2" label-width="100px" >
<el-form-item label=" " prop="age">
<el-input v-model.number="tableForm2.age" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-form :model="tableForm3" ref="tableForm3" :rules="rules3" label-width="100px" >
<el-form-item label=" " prop="name">
<el-input v-model.number="tableForm3.name" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="resetForm"> </el-button>
</div>
</template>
<script>
export default {
name: 'Home',
data () {
return {
tableForm1: {
price: ''
},
tableForm2: {
age: ''
},
tableForm3: {
name: ''
},
rules1: {
price: [{ required: true, message: ' ', trigger: 'blur' }]
},
rules2: {
age: [{ required: true, message: ' ', trigger: 'blur' }]
},
rules3: {
name: [{ required: true, message: ' ', trigger: 'blur' }]
}
}
},
methods: {
resetForm () {
this.$refs.tableForm1.resetFields()
this.$refs.tableForm2.resetFields()
this.$refs.tableForm3.resetFields()
},
submitForm () {
const formName = ['tableForm1', 'tableForm2', 'tableForm3']
const validates = (item) => {
return new Promise((resolve, reject) => {
if (!this.$refs[item]) {
resolve()
return false
}
this.$refs[item].validate((valid) => {
if (valid) {
resolve()
} else {
reject(new Error(' '))
}
})
})
}
Promise.all(formName.map(item => validates(item))).then(() => {
console.log(' ')
}).catch(() => {
console.log(' ')
})
}
}
}
</script>
以上、elementの複数のフォーム検証の実施に関する記事をここに紹介します。もっと関連するelementフォームの検証内容は以前の文章を検索してください。または下記の関連記事を引き続き閲覧してください。これからもよろしくお願いします。