面试题答案
一键面试多选框组双向绑定及验证
- 模板部分:
<template> <div> <form> <div v-for="(hobby, index) in hobbies" :key="index"> <input type="checkbox" v-model="selectedHobbies" :value="hobby"> {{ hobby }} </div> <button type="submit" @click.prevent="submitForm">提交</button> </form> </div> </template>
- 数据及方法部分:
在上述代码中,使用<script> export default { data() { return { hobbies: ['阅读', '运动', '音乐', '绘画'], selectedHobbies: [] }; }, methods: { submitForm() { if (this.selectedHobbies.length < 2) { alert('至少选择两项兴趣爱好'); return; } // 提交表单逻辑 } } }; </script>
v - model
指令实现了多选框组的双向绑定。在提交表单时,通过判断selectedHobbies
数组的长度来进行至少选择两项的验证。
嵌套地址对象双向绑定及验证
- 模板部分:
<template> <div> <form> <label>省:</label> <input type="text" v-model="address.province"> <label>市:</label> <input type="text" v-model="address.city"> <label>区:</label> <input type="text" v-model="address.district"> <button type="submit" @click.prevent="submitAddressForm">提交</button> </form> </div> </template>
- 数据及方法部分:
这里通过<script> export default { data() { return { address: { province: '', city: '', district: '' } }; }, methods: { submitAddressForm() { let hasError = false; if (!this.address.province) { alert('省不能为空'); hasError = true; } if (!this.address.city) { alert('市不能为空'); hasError = true; } if (!this.address.district) { alert('区不能为空'); hasError = true; } if (!hasError) { // 提交地址表单逻辑 } } } }; </script>
v - model
指令实现了地址对象中各个字段的双向绑定。在提交表单时,对省、市、区字段进行非空验证。