Vue表单元素绑定:v-model 指令

news2024/9/22 13:45:30

 Vue 指令系列文章:

《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》

《Vue指令:v-cloak、v-once、v-pre 指令》

《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》

《Vue循环遍历:v-for 指令》

《Vue事件处理:v-on 指令》

《Vue表单元素绑定:v-model 指令》

1、v-model 指令

在 Web 应用中,通过表单可以实现输入文本、选择选项和提交数据等功能。在 Vue.js 中,通过 v-model 指令可以对象表单元素进行双向数据绑定,在修改表单值的同时,Vue 实例中对应的属性值也会随之更新,反之亦然。

1.1 文本框的绑定

v-model 指令会根据控件类型自动选取正确的方法来更新元素。在表单中,最基本的表单控件类型是文本框。应用 v-model 指令将文本框和定义的数据进行绑定。

<!-- 绑定:文本框 -->
<input type="text" v-model="userModel.userName"/>

1.2 单选按钮的绑定

单选按钮和定义的数据进行绑定,当某个单选按钮选中是,v-model 指令绑定的属性值会被赋值为该单选按钮的 value 属性值。

<!-- 绑定:单选按钮 -->
<input id="male" type="radio" value="1" v-model="userModel.sex" />
<label for="male">男</label>

<input id="female" type="radio" value="2" v-model="userModel.sex" />
<label for="female">女</label>

<input id="secrecy" type="radio" value="3" v-model="userModel.sex" />
<label for="secrecy">保密</label>

1.3 下拉列表框的绑定

在只提供单选的下拉列表框中,当选择某个选项时,如果为该选项设置了 value 值,则 v-model 绑定的属性值会被赋值为显示在该选项中的文本。

<!-- 绑定:下拉列表框 -->
<select name="departmentCode" v-model="userModel.departmentCode">
    <option value="">请选择</option>
    <option value="1001">研发部</option>
    <option value="1002">财务部</option>
    <option value="1003">人事部</option>
</select>

1.4 复选框的绑定

复选框和定义的数据进行绑定,数据类型为数组。v-model 指令会自动根据数组里的值与复选框进行绑定。

<!-- 绑定:复选框 -->
<input type="checkbox" id="2001" value="2001" v-model="userModel.roleCode">
<label for="2001">系统管理员 </label>

<input type="checkbox" id="2002" value="2002" v-model="userModel.roleCode">
<label for="2002">人事管理员 </label>

<input type="checkbox" id="2003" value="2003" v-model="userModel.roleCode">
<label for="2003">财务管理员 </label></td>

1.5 综合实例

【实例】使用 v-model 指令,绑定表单元素:文本框、单选按钮、下拉列表框、复选框。执行结果如下图:

创建 index.html 文件,代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="pan_junbiao的博客">
    <title>v-model指令</title>

    <!-- 设置CSS样式 -->
    <style type="text/css">
        table {
            /*设置单元格的边框合并为1*/
            border-collapse: collapse;

        }

        th {
            text-align: right;
        }

        th,
        td {
            border: 1px solid #000000;
            padding: 5px 10px;
        }

        .b_text {
            width: 300px;
            padding: 3px;
            font-size: 16px;
        }

        select {
            width: 100px;
            padding: 3px;
        }
    </style>
</head>

<body>
    <div id="app">
        <form action="" method="post" name="myForm">
            <table align="center">
                <caption>用户信息</caption>
                <!-- 绑定:文本框 -->
                <tr>
                    <th>用户姓名:</th>
                    <td>
                        <input type="text" v-model="userModel.userName" class="b_text" />
                    </td>
                </tr>
                <tr>
                    <th>博客地址:</th>
                    <td>
                        <input type="text" v-model="userModel.blogUrl" class="b_text" />
                    </td>
                </tr>
                <!-- 绑定:单选按钮 -->
                <tr>
                    <th>性别:</th>
                    <td>
                        <input id="male" type="radio" value="1" v-model="userModel.sex" />
                        <label for="male">男</label>
                        <input id="female" type="radio" value="2" v-model="userModel.sex" />
                        <label for="female">女</label>
                        <input id="secrecy" type="radio" value="3" v-model="userModel.sex" />
                        <label for="secrecy">保密</label>
                    </td>
                </tr>
                <!-- 绑定:下拉列表框 -->
                <tr>
                    <th>部门:</th>
                    <td>
                        <select name="departmentCode" v-model="userModel.departmentCode">
                            <option value="">请选择</option>
                            <option v-for="(item, index) in departmentList" :key="index" :value="item.departmentCode">{{
                                item.departmentName }}</option>
                        </select>
                    </td>
                </tr>
                <!-- 绑定:复选框 -->
                <tr>
                    <th>角色:</th>
                    <td>
                        <template v-for="(role, index) in roleList" :key="index">
                            <input type="checkbox" :id="role.roleCode" :value="role.roleCode"
                                v-model="userModel.roleCode" />
                            <label :for="role.roleCode">{{ role.roleName + " " }}</label>
                        </template>
                    </td>
                </tr>
                <tr>
                    <th>博客信息:</th>
                    <td>
                        <input type="text" v-model="userModel.blogName" class="b_text" />
                    </td>
                </tr>
                <!-- 以下是提交、取消按钮 -->
                <tr>
                    <td colspan="2" style="text-align: center; padding: 5px;">
                        <input type="submit" value="提交" style="margin-right: 10px;" />
                        <input type="reset" value="重置" />
                    </td>
                </tr>
            </table>
        </form>
    </div>
</body>

<!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script>

<script type="text/javascript">
    // 使用 Vue.createApp 函数创建一个应用程序实例
    const vueApp = Vue.createApp({
        //数据
        data() {
            return {
                userModel: {},        //用户对象
                departmentList: [],  //部门列表
                roleList: []         //角色列表  
            }
        },
        //初始化入口
        created() {
            this.getUserInfo();        //获取用户信息
            this.getDepartmentList();  //获取部门列表
            this.getRoleList();        //获取角色列表
        },
        //方法
        methods: {
            //获取用户信息
            getUserInfo: function () {
                this.userModel = {
                    userName: "pan_junbiao的博客",
                    blogName: "您好,欢迎访问 pan_junbiao的博客",
                    blogUrl: "https://blog.csdn.net/pan_junbiao",
                    sex: 1,
                    departmentCode: "1001",
                    roleCode: ["2001", "2003"]
                }
            },
            //获取部门列表
            getDepartmentList: function () {
                this.departmentList = [
                    { departmentCode: "1001", departmentName: "研发部" },
                    { departmentCode: "1002", departmentName: "财务部" },
                    { departmentCode: "1003", departmentName: "人事部" }
                ]
            },
            //获取角色列表
            getRoleList: function () {
                this.roleList = [
                    { roleCode: "2001", roleName: "系统管理员" },
                    { roleCode: "2002", roleName: "人事管理员" },
                    { roleCode: "2003", roleName: "财务管理员" }
                ]
            }
        }
        //使用 mount() 方法,装载应用程序实例的根组件
    }).mount('#app'); 
</script>

</html>

2、修饰符的使用

Vue.js 为 v-model 指令提供了一些修饰符,通过这些修饰符可以处理某些常规操作。这些修饰符的说明如下:

2.1 lazy

默认情况下,应用 v-model 指令将文本框的值与数据进行同步时使用的是 input 事件。如果添加了 lazy 修饰符,就可以转变为使用 change 事件进行同步。示例代码如下:

<body>
    <div id="app">
        <input v-model.lazy="message" class="b_text" placeholder="请输入内容">
        <p>{{message}}</p>
    </div>
</body>

<!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script>

<script type="text/javascript">
    // 使用 Vue.createApp 函数创建一个应用程序实例
    const vueApp = Vue.createApp({
        //数据
        data() {
            return {
                message:""
            }
        }
        //使用 mount() 方法,装载应用程序实例的根组件
    }).mount('#app'); 
</script>

执行结果:

2.2 number

通过在 v-model 指令中使用 number 修饰符,可以自动将用户输入的内容转换为数值类型。如果转换结果为 NaN,则返回用户输入的原始值。

<input v-model.number="message" placeholder="请输入内容">

2.3 trim

通过 v-model 指令添加 trim 修饰符可以自动过滤用户输入的字符串的收尾空格。

<input v-model.trim="message" placeholder="请输入内容">

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NPM:配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下&#xff0c;之前的源镜像地址 https://registry.npm.taobao.org/ 已经不能用了&#xff0c;这里要更改为新地…

80页PPT数据中台应用技术实施方案

本文资料完整版81页PPT&#xff0c;下载完整PPT资料&#xff0c;知识星球APP搜索【智慧方案文库】&#xff0c;下载“数据中台”合集资料&#xff0c;以及8800份解决方案 数据中台设计的方法 (1)基于面向服务的架构方法&#xff08;SOA&#xff09; 基于面向服务的架构方法 …

spring整合redis

1.导入依赖 <!-- spring-data-redis 依赖--> <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.7.18</version> </dependency> <dependency><…

旧衣回收小程序系统,为市场发展提供新模式

随着绿色生活的兴起&#xff0c;回收成为了大众生活的新选择&#xff0c;其中旧衣物回收更是深入人心&#xff01;通过旧衣物回收&#xff0c;大众不仅可以减少浪费&#xff0c;也能够进行资源在利用。目前&#xff0c;在科技的支持下&#xff0c;旧衣物回收正以一种新的方式进…

机械学习—零基础学习日志(如何理解概率论6)

随机变量的数字特征——期望与方差 以小明的成绩为例&#xff0c;如图所示。 这里其实涉及到&#xff0c;数学期望的概念。 对应的数值&#xff0c;乘以概率&#xff0c;相加以后就得到了数学期望。 随机变量的数学期望与方差 、 来个练习题&#xff1a; 解析&#xff1a; …

自制多肉查询工具

背景&#xff1a; 复习python qt、网页解析的常用操作 准备&#xff1a; 多肉信息网站涉及python的第三方库&#xff1a; lxmlPyQt5 实现效果&#xff1a; 功能&#xff1a; 随机读取&#xff1a;从本地加载已存储的多肉信息数据更新&#xff1a;从多肉信息网站更新5条多…

QT:Qt与ECharts

介绍ECharts ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;由百度团队最初开发&#xff0c;并在2018年初捐赠给Apache基金会&#xff0c;成为ASF孵化级项目。随着项目的不断发展&#xff0c;ECharts在2021年1月26日正式毕业&#xff0c;成为Apache顶级项目 链接…

背包问题【算法 07】

背包问题 背包问题是经典的计算机科学问题之一&#xff0c;涉及到如何在有限资源的约束下&#xff0c;选择最优的物品组合&#xff0c;以最大化收益。这个问题在现实中有广泛的应用&#xff0c;例如资源分配、物流调度和投资组合优化等。本文将详细介绍背包问题的定义、解决方法…

pytorch深度学习基础 7(简单的的线性训练,SGD与Adam优化器)

接下来小编来讲一下一些优化器在线性问题中的简单使用使用&#xff0c;torch模块中有一个叫optim的子模块&#xff0c;我们可以在其中找到实现不同优化算法的类 SGD随机梯度下降 基本概念 定义&#xff1a;随机梯度下降&#xff08;SGD&#xff09;是一种梯度下降形式&#…

mysql中出现错误1138-Invalid use of NULL value

问题&#xff1a;1138-Invalid use of NULL value 解决&#xff1a; 问题是当前字段中&#xff0c;有null的值&#xff0c;简单来说就是&#xff0c;你表里有空值&#xff0c;不能设置不为空&#xff01;&#xff01;&#xff01; 把空的值删掉重新设计就好了

第一次重大人工智能失败刚刚发生

这终于发生了。我们迎来了第一家真正意义上的 AI 公司惨败。 Inflection是一家由比尔盖茨、埃里克施密特、微软等人投资的公司&#xff0c;它成为第一家被冲进马桶的生成式人工智能相关公司。 他们最重要的产品是Pi&#xff0c;ChatGPT 的竞争对手&#xff0c;专注于成为友好且…

SpringAOP使用详解

AOP使用详解 首先创建maven项目 添加依赖在pom.xml里 创建三层结构和spring.xml文件&#xff0c;只要用到注解就得写扫描包在spring.xml里 上篇文章的知识点总结 对上篇文章excution详细解释 如果把前置通知修改成这个代表只有带有Logger注解的才会生效 合并注解的方法用&…

Windows权限维持实战

目录 介绍步骤 介绍 在攻击过程中中对于拿到的shell或钓上来的鱼&#xff0c;目前比较流行用CS做统一管理&#xff0c;但实战中CS官方没有集成一键权限维持的功能&#xff0c;为了将该机器作为一个持久化的据点&#xff0c;种植一个具备持久化的后门&#xff0c;从而随时可以连…

ffmpeg最新5.1.6版本源码安装

一、编译安装需要的开源编码格式&#xff1a; 首先在编译安装这些开源编码格式之前,我们要明白为啥需要他们&#xff1a; aacx264x265 为啥需要呢&#xff1f;如果你对ffmpeg稍微了解的话&#xff0c;ffmpeg本身是一个框架&#xff0c;自身默认并没有支持这三种编码格式&…

Vue3 后台管理系统项目 前端部分

这里写目录标题 1 创建Vue3项目1.1 相关链接1.2 Vue Router1.3 Element1.4 scss1.5 mitt1.6 axios1.7 echarts1.8 配置vite.config.js 2 CSS部分2.1 样式穿透2.2 :style &#xff1a;在样式中使用插值语法 3. ElementUI3.1 rules&#xff1a; 数据验证3.2 修改element.style中的…

《计算机网络-期末模拟卷》

一、分析题&#xff08;每题 6 分&#xff0c;共 36 分&#xff09; 1.请分析图 1-1 所展示的是哪种互联网接入技术&#xff0c;分析此接入技术的优势&#xff0c;并介绍你所了解的其他互联网接入技术。&#xff08;至少写 3 个&#xff09; 二、计算问答题&#xff08;每题 5…

docker应用

打包传输 1.将镜像打包 #查看帮助文件 docker --help #找到save&#xff0c;可以将镜像保存为一个tar包 docker save --help #查看save使用方式 #查看现有的镜像 docker images # docker save --output centos.tar centos:latest ls ...centos.tar... 可以将tar发送给其他用户…

JS基础进阶3-DOM事件

DOM事件流 一、定义 DOM事件流指的是从页面接收事件的顺序。这个路径包括了事件的捕获阶段、目标阶段和冒泡阶段。 图片来源黑马pink老师PPT 二、事件流阶段 DOM事件流涉及三个主要阶段&#xff1a; 捕获阶段&#xff08;Capturing Phase&#xff09;&#xff1a; 事件从…

QtChart1-基础入门

Qt Charts概述 Qt Charts模块是一组易于使用的图标组件&#xff0c;它基于Qt的Graphice View架构&#xff0c;其核心组件是QChartView和QChart。QChartView的父类是QGraphicsView&#xff0c;就是Graphics View架构中的视图组件&#xff0c;所以&#xff0c;QChartView是用于显…

Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(六):横纵向运动轨迹评估

参考文章: (1)Apollo6.0代码Lattice算法详解——Part6:轨迹评估及碰撞检测对象构建 (2)自动驾驶规划理论与实践Lattice算法详解 0 前言 横纵向运动轨迹的评估,主要通过构建定点巡航和定点停车两个场景下,对纵向运动参考速度、加速度、加加速度的大小进行检验和过滤,然…