当前位置: 首页 > news >正文

实验4:表单控件绑定(2学时)

  1. 实验目的

(1)熟练掌握应用v-model指令实现双向数据绑定的方法,学会使用v-model指令绑定文本框、复选框、单选按钮、下拉菜单

(2)学会值绑定(将表单控件的值绑定到动态属性v-model 的修饰符

  1. 实验内容

使用v-model指令实现表单控件的数据绑定,完成用户注册信息的填写和显示功能。要求:设计如图1所示的用户注册表单,使用v-model指令实现表单控件与Vue实例的相应属性的双向数据绑定,当用户填写信息(或选择)完毕并点击提交按钮,程序将用户填写的信息或选择的结果输出至控制台,或弹窗显示

图1

参考基础代码如下:

请在此基础上,利用v-model指令及其他相关指令或Vue知识完成代码编写和调试。

  1. 实验原理或流程图

在 Vue.js 中,可以通过 v-model 指令对表单元素进行双向数据绑定。在修改表单元素值的同时, Vue实例中对应的属性值也会随之更新;反之亦然。

(1)应用v-model指令绑定文本框、复选框、单选按钮、下拉菜单

应用v-model指令可以单行文本框或多行文本框(文本域)的值与Vue实例中的属性值进行双向数据绑定; 可以绑定单个复选框(绑定的是一个布尔值)或多个复选框(绑定的是一个数组);也可以绑定单选按钮,当某个单选按钮被选中时,v-model指令绑定的属性值会被赋值为该单选按钮的value值;还可以应用v-model指令绑定下拉菜单,对于单选情形,当选择某个选项时,v-model指令绑定的属性值会被赋值为该选项的value值(如果未设置value值,则被赋值为该选项中的文本),对于多选情形,应用v-model指令绑定的则是一个数组。

(2)使用v-bind指令实现表单控件的值绑定

在通常情况下,对于单选按钮、复选按钮、下拉菜单中的选项, v-model 指令绑定的值是静态字符串(对于单个复选框,绑定的是布尔值)。但是,有时需要将值绑定到 Vue 实例的一个动态属性上,而不是绑定到静态字符串,这时就可以使用v-bind 指令来实现。

(3)v-model指令修饰符

Vue.js 为 v-model 指令提供了一些修饰符,例如.lazy.number.trim,可以用于处理某些常规操作。

  1. 实验过程或源代码

RegistrationForm.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>用户注册表单</title>

    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>

</head>

<body>

    <div id="app">

        <form @submit.prevent="submitForm">

            <label for="username">用户名:</label>

            <input type="text" id="username" v-model="user.username" required>

            <br><br>

            <label for="bio">个人简介:</label>

            <textarea id="bio" v-model="user.bio"></textarea>

            <br><br>

            <label>性别:</label>

            <input type="radio" id="male" value="男" v-model="user.gender">

            <label for="male"></label>

            <input type="radio" id="female" value="女" v-model="user.gender">

            <label for="female"></label>

            <br><br>

            <label>爱好:</label>

            <div v-for="(hobby, index) in hobbies" :key="index">

                <input type="checkbox" :id="'hobby' + index" :value="hobby" v-model="user.hobbies">

                <label :for="'hobby' + index">{{ hobby }}</label>

            </div>

            <br><br>

            <label for="location">所在地:</label>

            <select id="location" v-model="user.location">

                <option v-for="location in locations" :value="location">{{ location }}</option>

            </select>

            <br><br>

            <label>选择你擅长的技术:</label>

            <select id="tech" v-model="user.tech" multiple>

                <option v-for="tech in techs" :value="tech">{{ tech }}</option>

            </select>

            <br><br>

            <label for="positions">可选职位:</label>

            <select id="positions" multiple v-model="user.positions">

                <option v-for="position in positions" :value="position">{{ position }}</option>

            </select>

            <br><br>

            <button type="button" @click="addAllPositions">全选</button>

            <button type="button" @click="removeAllPositions">全不选</button>

            <button type="button" @click="invertPositions">反选</button>

            <br><br>

            <button type="submit">提交</button>

            <button type="reset" @click="resetForm">取消</button>

        </form>

    </div>

    <script>

        new Vue({

            el: '#app',

            data: {

                user: {

                    username: '',

                    bio: '',

                    gender: '',

                    hobbies: [],

                    location: '',

                    tech: [],

                    positions: []

                },

                hobbies: ['HTML', 'CSS', 'Vue'],

                locations: ['北京', '上海', '广州', '深圳'],

                techs: ['Java', '前端Vue', 'PHP'],

                positions: ['Java程序员', '软件测试师', '前端工程师']

            },

            methods: {

                submitForm() {

                    console.log('注册信息:', this.user);

                    alert('注册信息: ' + JSON.stringify(this.user));

                },

                addAllPositions() {

                    this.user.positions = this.positions.slice();

                },

                removeAllPositions() {

                    this.user.positions = [];

                },

                invertPositions() {

                    this.user.positions = this.positions.filter(p => !this.user.positions.includes(p));

                },

                resetForm() {

                    this.user = {

                        username: '',

                        bio: '',

                        gender: '',

                        hobbies: [],

                        location: '',

                        tech: [],

                        positions: []

                    };

                }

            }

        });

    </script>

</body>

</html>

  1. 实验心得

HTML 结构:

添加了个人简介的文本区域。

添加了所在地的下拉菜单。

添加了选择你擅长的技术的多选下拉菜单。

添加了可选职位的多选下拉菜单,并提供了全选、全不选和反选的按钮。

Vue 实例:

data 对象中添加了 bio、location、tech 和 positions 属性。

hobbies、locations、techs 和 positions 数组用于提供下拉菜单和复选框的选项。

methods 对象中添加了 addAllPositions、removeAllPositions、invertPositions 和 resetForm 方法,用于处理职位选择的逻辑。

事件处理:

@click="addAllPositions"、@click="removeAllPositions" 和 @click="invertPositions" 用于处理全选、全不选和反选的按钮点击事件。

@click="resetForm" 用于重置表单。

展示在 Vue.js 中使用 v-model 指令进行双向数据绑定,并处理表单提交和职位选择的逻辑。


文章转载自:

http://dkP2AcgE.rjnrf.cn
http://v8fK3MHg.rjnrf.cn
http://wlDIK3ux.rjnrf.cn
http://x6LUVUZQ.rjnrf.cn
http://yl4Gl2S1.rjnrf.cn
http://eLZCRbCc.rjnrf.cn
http://rZqCY8V5.rjnrf.cn
http://2Y8I5EFX.rjnrf.cn
http://NeXA6yqg.rjnrf.cn
http://6ziATUun.rjnrf.cn
http://1Kap603D.rjnrf.cn
http://KD2WTbl2.rjnrf.cn
http://ukGK9m4F.rjnrf.cn
http://RTw9nWdZ.rjnrf.cn
http://89qFB1Kh.rjnrf.cn
http://wbWB7epY.rjnrf.cn
http://wT3Bn1MZ.rjnrf.cn
http://pgZt4qBe.rjnrf.cn
http://2tBz0zw5.rjnrf.cn
http://bwwKTLwG.rjnrf.cn
http://YZ7NnZ70.rjnrf.cn
http://1g2d6qGr.rjnrf.cn
http://xdUO1NyB.rjnrf.cn
http://hMdX9pcr.rjnrf.cn
http://dGJT8mnn.rjnrf.cn
http://mh569nYI.rjnrf.cn
http://OKWlp8B5.rjnrf.cn
http://QHGVkvRz.rjnrf.cn
http://tVwE5Ydn.rjnrf.cn
http://J3U08wtd.rjnrf.cn
http://www.dtcms.com/a/388582.html

相关文章:

  • QT OpenCV 准备工具
  • 无锁化编程(Lock-Free Programming)分析
  • Centons7 docker 安装 playwright
  • 远距离传输大型文件:企业数字化转型的挑战与突破
  • 氧气科技亮相GDMS全球数字营销峰会,分享AI搜索时代GEO新观
  • useMemo和useCallback
  • 【数据结构---图的原理与最小生成树算法,单源最短路径算法】
  • 有发声生物(猫狗鸟等)与无发声生物(蚂蚁蝙蝠蛇等)的 “感知-->行动“
  • CC 攻击为什么越来越难防?
  • 量化交易 - Multiple Regression 多变量线性回归(机器学习)
  • 【机器学习】基于双向LSTM的IMDb情感分析
  • CLR-GAN训练自己的数据集
  • LeetCode 242 有效的字母异位词
  • 中州养老:Websocket实现报警通知
  • python+excel实现办公自动化学习
  • 深度学习快速复现平台AutoDL
  • 《股票智能查询与投资决策辅助应用项目方案》
  • nvm安装包分享【持续更新】
  • 2025年- H143-Lc344. 反转字符串(字符串)--Java版
  • 数据库的事务
  • Cadence SPB 2025安装教程(附安装包)Cadence SPB 24.1下载详细安装图文教程
  • .NET Framework 4.8 多线程编程
  • qt QHorizontalPercentBarSeries详解
  • 软考中级习题与解答——第七章_数据库系统(3)
  • Redis(基础数据类型/String)
  • python的面试题
  • 内聚和耦合基础
  • Java基本类型与包装类在MyBatis中的应用指南
  • 《Unity3D VR游戏手柄振动与物理碰撞同步失效问题深度解析》
  • 基于 Rust 的 CAD 工具demo示例