vue v-model的详细介绍

news2024/11/15 1:32:28

v-model是什么?

v-model 是Vue框架的一种内置的API指令,本质是一种语法糖写法。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理

为什么使用v-model?

v-model指令可以在表单input、textarea以及select元素上创建双向数据绑定它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但v-model 本质上不过是语法糖,它负责监听用户的输入事件来更新数据,并在某种极端场景下进行一些特殊处理

什么场景下会使用v-model?

表单提交是开发中非常常见的功能,也是和用户交互的重要手段:比如用户在登录、注册时需要提交账号密码;比如用户在检索、创建、更新信息时,需要提交一些数据;这些都要求我们可以在代码逻辑中获取到用户提交的数据,我们通常会使用v-model指令来完成

v-model的基本使用

它会根据控件类型自动选取正确的方法来更新元素;尽管有些神奇,但 v-model 本质上不过是语法糖,它负责监听用户的输入事件来更新数据,并在某种极端场景,下进行一些特殊处理:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>model双向绑定</title>
</head>
<body>
    <div id="app">
        <h1>{{message}}</h1>
        <input type="text" v-model="message">
        <!--  下面这种也能实现
        input属性是每输入一次它响应一次,$event.target.value这个是获取输入的值--> -->
        <!-- <input type="text" :value="message" @input="message = $event.target.value">  -->
    </div>
    <script src="../vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: "nb"
            }
        })
    </script>
</body>
</html>

在这里插入图片描述
v-model修饰符的使用

目前我们在前面的案例中大部分的值都是在template中固定好的:
比如gender的两个输入框值male、female;比如hobbies的三个输入框值basketball、football、tennis;
在真实开发中,我们的数据可能是来自服务器的,那么我们就可以先将值请求下来,绑定到data返回的对象中,再通过v-bind来进行值的绑定,这个过程就是值绑定。
这里不再给出具体的做法,因为还是v-bind的使用过程。
v-model修饰符 - lazy
lazy修饰符是什么作用呢?
默认情况下,v-model在进行双向绑定时,绑定的是input事件,那么会在每次内容输入后就将最新的值和绑定的属性进行同步;
如果我们在v-model后跟上lazy修饰符,那么会将绑定的事件切换为 change 事件,只有在提交时(比如回车)才会触发

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="message">
        <h1>{{message}}</h1>
        <!-- lazy当按enter键才会让model执行 -->
        <input type="text" v-model.lazy="message1">
        <h1>{{message1}}</h1>

        <input type="number" v-model="age">
        <h1>{{typeof age}}</h1>
        <!-- number 数字类型和转为数字类型-->
        <input type="number" v-model.number="age">
        <h1>{{typeof age}}</h1>

        <input type="text" v-model="name">
        <h1>{{name}}</h1>
        <!-- trim 去除左右两边空格-->
        <input type="text" v-model.trim="name1">
        <h1>{{name1}}</h1>
    </div>
    <script src="../vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: "你好呀!",
                message1: "你好呀!",
                age: 0,
                name: '           sss',
                name1: '           sss'
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

v-model的值绑定

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
    <div id="app">
        <label v-for="item in hobbies">
            <input type="checkbox" :value="item" :id="item" v-model="myhobbies">{{item}}
        </label>
        <h1>您选择的爱好是:{{myhobbies}}</h1>
    </div>

    <script src="../vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                myhobbies: [],
                hobbies: ["篮球","排球","乒乓球","羽毛球","台球"]
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

v-model结合radio

v-model绑定radio,用于选择其中一项

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 把value的值给v-model绑定的变量 -->
        <!-- 两个radio都绑定同一个变量的v-model,已经达到了互斥,两个都不用写name -->
        <!-- type="radio"的选中状态不是根据checked来选中的,而是在data中定义一个属性,
        且让data中属性的值等于value的值,就会被选中了。(反过来,如果选中了,则v-model = value) -->
        <label for="male">
            <input type="radio" id="male" value="男" v-model="sex"></label>
        
        <label for="female">
            <input type="radio" id="female" value="女" v-model="sex"></label>
        <h1>您选择的性别是:{{sex}}</h1>
    </div>
    <script src="../vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                sex: '男'
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

v-model结合select

和checkbox一样,select也分单选和多选两种情况。
单选:
只能选中一个值,v-model绑定的是一个值;
当我们选中option中的一个时,会将它对应的value赋值到fruit中;
多选:
可以选中多个值,v-model绑定的是一个数组;
当选中多个值时,就会将选中的option对应的value添加到数组fruit中;

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
    <div id="app">
        <select name="abc" id="myfruit" v-model="fruit">
            <option value="苹果">苹果</option>
            <option value="香蕉">香蕉</option>
            <option value="西瓜">西瓜</option>
            <option value="草莓">草莓</option>
        </select>
        <h1>您选择的水果是:{{fruit}}</h1>

        <!-- 选择多个 -->
        <select name="abc" id="myfruit1" v-model="fruits" multiple>
            <option value="苹果">苹果</option>
            <option value="香蕉">香蕉</option>
            <option value="西瓜">西瓜</option>
            <option value="草莓">草莓</option>
        </select>
        <h1>您选择的水果是:{{fruits}}</h1>
    </div>
    <script src="../vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                fruit: "西瓜",
                fruits: []
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

v-model结合checkbox

我们来看一下v-model绑定checkbox:单个勾选框和多个勾选框
单个勾选框:
v-model即为布尔值。
此时input的value并不影响v-model的值。
多个复选框:
当是多个复选框时,因为可以选中多个,所以对应的data中属性是一个数组。
当选中某一个时,就会将input的value添加到数组中。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
    <div id="app">
        <!-- checkbox单选框 -->
        <label for="agree">
            <input type="checkbox" id="agree" v-model="isAgree">同意协议
        </label>
        <h1>你选择的是:{{isAgree}}</h1>
        <button :disabled="!isAgree">下一步</button>
        <br>

        <!-- checkbox复选框 -->
            <input type="checkbox" value="篮球" v-model="hobbies">篮球
            <input type="checkbox" value="排球" v-model="hobbies">排球
            <input type="checkbox" value="兵乓球" v-model="hobbies">乒乓球
            <input type="checkbox" value="羽毛球" v-model="hobbies">羽毛球
            <h2>您的爱好是:{{hobbies}}</h2>
    </div>
    <script src="../vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                isAgree: false,
                hobbies: []
            }
        })
    </script>
</body>
</html>

在这里插入图片描述

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

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

相关文章

Power BI中如何实现移动平均功能

一、移动平均 移动平均&#xff0c;是一种常用的统计分析方法&#xff0c;它是指将一定时间范围内的数据&#xff0c;按一定的时间间间隔进行计算平均&#xff0c;然后将平均值形成一条折线。常用的时间间隔有10天、20天、30天、60天等。 当原数据折线图波动比较大时&#xff…

利用GPAC生成MP4文件

GPAC主要针对学生和内容创作者&#xff0c;代表了一个跨平台的多媒体框架&#xff0c;开发人员可以使用它在 LGPL 许可下制作开源媒体。GPAC多媒体框架兼容范围广泛的流行文件类型&#xff0c;从常见格式(如 AVI、MPEG 和 MOV)到复杂格式(如 MPEG-4 系统或 VRML/X3D)和 360 电影…

哈工大机器学习复习笔记(二)

本篇文章是在参考西瓜书、PPT课件、网络上相关博客等资料的基础上整理出的机器学习复习笔记&#xff0c;希望能给大家的机器学习复习提供帮助。这篇笔记只是复习的一个参考&#xff0c;大家一定要结合书本、PPT来进行复习&#xff0c;有些公式的推导最好能够自己演算一遍。由于…

JVM结构 类加载

类加载 类加载子系统 类加载器子系统负责从文件系统或者网络中加载class文件。classLoadr只负责class文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由Exception Engine&#xff08;执行引擎&#xff09;决定。加载类的信息存放于一块成为方法区的内存空间 class fi…

【GPLT 二阶题目集】L2-007 家庭房产

给定每个人的家庭成员和其自己名下的房产&#xff0c;请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤1000&#xff09;&#xff0c;随后N行&#xff0c;每行按下列格式给出一个人的房产&#xff1a; 编号…

Java创建线程的七种方法,全网最全面总结~

目录 前言 一、继承Thread&#xff0c;重写run方法 二、实现Runnable接口&#xff0c;重写run方法 三、使用匿名内部类创建 Thread 子类对象 四、使用匿名内部类&#xff0c;实现Runnable接口 五、lambda表达式 六、实现Callable接口 七、使用线程池创建线程 前言 属于基…

末端工具重力辨识

辨识工具重力 法一&#xff1a;6点标定 已知&#xff0c;工件重力在世界坐标系的大小为{0,0,−G}\{0,0,-G\}{0,0,−G},假设工件重心在工具坐标系下的坐标为 {Lx,Ly,Lz}\{L_x,L_y,L_z\}{Lx​,Ly​,Lz​}&#xff0c;重力在工件的三个坐标轴分量为 {Gx,Gy,Gz}\{G_x,G_y,G_z\}{G…

Docker安装MySQL8数据库

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

为什么要拒绝嵌套代码?

linux 内核的最早作者 linus torvalds 在 linux 内核样式指南 第一节中提到&#xff1a; if you need more than 3 levels of indentation, you’re screwed anyway, and should fix your program. 如果你需要超过3级的缩进&#xff0c;你无论如何都搞砸了&#xff0c;应该修复…

ABBYY15免费照片识别文字识别软件

照片识别文字的软件有哪些&#xff1f;在日常的工作的时候&#xff0c;小伙伴们是不是经常会借助拍摄照片记录一些比较重要的事情或者是一些比较重要的笔记&#xff0c;等回头空闲出来的时候在去整理&#xff0c;那么这时候&#xff0c;如果我们运用好图片识别文字这项技术&…

线性代数篇

主线为花书第二章-线性代数&#xff0c;但其上面一些表述属实费解&#xff0c;于是参考B站3Blue1Brown线性代数和B站同济子豪兄的视频讲解。 先放一句3B1B的话共勉&#xff0c;伙计们不要被数学公式吓到&#xff0c;慢慢钻研&#xff0c;慢慢推肯定能学懂。线性代数这一部分相信…

cannot redeclare block-scoped variable

使用 Vue3.0 的时在模块类中声明方法的时候抛出了如下的异常:cannot redeclare block-scoped variable解决办法检查是否集成了 Vetur 插件,若存在禁用或卸载即可,该插件Vue3.0 的时候会冲突;Vue3.0 集成如下两款即可:名称: TypeScript Vue Plugin (Volar)ID: Vue.vscode-typesc…

Qt 自定义控件 带UI 不带 UI

一般自定义控件原因 有时Qt 现有控件不能满足我们的开发需求&#xff0c;这时候就需要我们进行自定义控件的使用&#xff0c;自定义控件,这大大提高了设计UI的通用性,程序利用&#xff0c;封装&#xff1b; Part1 easy one 继续 Lab 自定义Label控件&#xff1a;文本太长省略…

机械设备管理系统如何帮助企业做好成本核算管理?

随着多元化市场经济的深入发展&#xff0c;机械设备制造企业面临的竞争压力也越来越大&#xff0c;企业要想在激烈的市场环境中生存下去&#xff0c;就得不断提高竞争力。企业提高自身竞争能力最为重要一个途径便是不断提高企业的成本核算及管控能力&#xff0c;降低企业经营成…

java使用导出百万级别数据

用过POI的人都知道&#xff0c;在POI以前的版本中并不支持大数据量的处理&#xff0c;如果数据量过多还会常报OOM错误&#xff0c; 这时候调整JVM的配置参数也不是一个好对策&#xff08;注&#xff1a;jdk在32位系统中支持的内存不能超过2个G&#xff0c;而在64位中没有限制&a…

栈、堆、全局区/静态存储区、常量区、代码段、到底是什么?

一、程序运行内存分布图 我们知道一个由我们编写好的程序&#xff0c;运行时&#xff0c;我们的程序中写的代码&#xff0c;定义的变量&#xff0c;写的函数、for 循环等等&#xff0c;这些运行时都分布在内存中的哪里吗&#xff1f; 一下是一个程序运行时 内存的各个区域的分…

C语言字符串指针(指向字符串的指针)详解

C语言中没有特定的字符串类型&#xff0c;我们通常是将字符串放在一个字符数组中&#xff0c;这里演示一下&#xff1a;#include<stdio.h> #include<string.h>intmain(){ char str[]"http://csdn.net"; int len strlen(str), i; //直接输出字符串 printf…

一套完全开源,支持多租户,界面配置单点的后端框架JVS,赶紧收藏

今天推荐的这个项目是「JVS数据全家桶中的 JVS微服务框架」—— 是一个免费开源的中后台模版&#xff0c;使用了最新的 vuespring cloud 主流技术开发&#xff0c;开箱即用的中后台前端解决方案&#xff0c;可以直接商用&#xff0c;并且这个脚手架上做了很多商业上的扩展&…

day19 二叉树 | 654、最大二叉树 617、合并二叉树 700、二叉搜索树中的搜索 98、验证二叉搜索树

题目 654、最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

数据中心转型利润中心:数据如何赋能零售行业营销升级?

通过大数据来提升营销效果已经是零售行业不同业态都绕不过去的话题。以往&#xff0c;市场团队在进行投放时需要依靠营销团队和销售团队的经验来判断&#xff0c;这样的营销策略较为粗放&#xff0c;对用户的感知也不精准&#xff0c;一般都是在海量投放后被动的等待营销反馈。…