返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vuev-model实现案例介绍
  • 608
分享到

Vuev-model实现案例介绍

2024-04-02 19:04:59 608人浏览 安东尼
摘要

目录1. 概述2. 使用方法3. 案例3.1 用户登录3.2 todolist3.3 实现单个复选框3.4 实现多个复选框3.5 实现复选框全选3.6 单选和下拉4. v-model

1. 概述

v-model 是 Vue 提供的一个语法糖,它是 value 值和事件的结合体,它会根据不同的表单项,来选择执行不同的事件。它的作用是,通过和表单元素绑定,实现双向数据绑定,通过表单项可以更改数据。

另外,v-model 还可以用于各种不同类型的输入,<textarea><select> 元素。它会根据所使用的元素自动使用对应的 DOM 属性和事件组合:

  • 文本类型的 <input><textarea> 元素会绑定 value property 并侦听 input 事件;
  • <input type="checkbox"><input type="radio"> 会绑定 checked property 并侦听 change 事件;
  • <select> 会绑定 value property 并侦听 change 事件

v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值,而总是将 Vue 实例的数据作为数据来源,应该在 data 选项中声明初始值。

语法糖:这种语法对语言的功能并没有影响,但是更方便程序员使用

2. 使用方法

在没有使用v-model指令时,我们通过data数据控制表单项中的值,还是麻烦的,需要绑定属性和事件来完成。

<div id="app">
    <div>
        <input type="text" :value="username" @input="setUsername">
    </div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            username: ''
        },
        methods: {
            setUsername(evt) {
                this.username = evt.target.value.trim()
            }
        }
    })
</script>

使用 v-model 指令实现上述效果:

<div id="app">
    <div>
        <input type="text" v-model="username">
    </div>
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            username: ''
        }
    })
</script>

3. 案例

3.1 用户登录

使用 v-model 指令,可以很轻松的获取表单中的数据,也可以很轻松地对数据进行修改。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta Http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <div>
                <label>
                    账号:
                    <input type="text" v-model="username">
                </label>
            </div>
            <div>
                <label>
                    密码:
                    <input type="text" v-model="passWord">
                </label>
            </div>
            <div>
                <textarea v-model="intro"></textarea>
            </div>
            <div>
                <button @click="dologin">登录系统</button>
            </div>
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    username: '',
                    password: '',
                    intro: 'hahaha'
                },
                methods: {
                    dologin() {
                        console.log(this.username, this.password, this.intro);
                    }
                }
            })
        </script>
    </body>
</html>

注意:多行文本框中使用插值表达式 无效

3.2 todolist

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input placeholder="请输入内容" type="text" v-model="title" @keyup.enter="onEnter">
            <hr>
            <ul>
                <!-- 条件渲染 -->
                <li v-if="todos.length===0">无任务</li>
                <li v-else v-for="item,index in todos" :key="item.id">
                    <span>{{item.title}}</span>
                    <span @click="del(index)">删除</span>
                </li>
            </ul>
        </div>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    todos: [],
                    title: ''
                },
                methods: {
                    onEnter() {
                        this.todos.push({
                            id: Date.now(),
                            title: this.title
                        })
                        this.title = ''
                    },
                    del(index) {
                        // 删除 它可以使用 vue中提供的变异方法splice来完成,用此方法它会触发视图更新
                        this.todos.splice(index, 1)
                    }
                }
            })
        </script>
    </body>
</html>

3.3 实现单个复选框

当单个复选框被选中或者被取消选中时,我们如何获取到该复选框是否被选中的信息?

我们可以通过绑定事件来获取:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <!-- 第1步: 引入vue库文件 -->
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <!-- 第2步:挂载点 -->
        <div id="app">
            <div>
                <!-- click事件可以用,但它是的状态会太过提前,用onchange事件,改变后来获取 -->
                <input type="checkbox" @click="clickFn">
                <input type="checkbox" @change="clickFn">
            </div>
        </div>
        <!-- 第3步:实例化vue -->
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    // 单个复选框一定要用布尔类型
                    checked: false
                },
                methods: {
                    clickFn(evt) {
                        console.log(evt.target.checked);
                    }
                }
            })
        </script>
    </body>
</html>

注意:在绑定事件时,click事件可以用,但它是的状态会太过提前,所以用onchange事件,改变后再来获取。

更简单的方式是,通过 v-model 指令来获取:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <!-- 第1步: 引入vue库文件 -->
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <!-- 第2步:挂载点 -->
        <div id="app">
            <div>
                <!-- 单个复选框,在数据源中定义的数据类型为布尔类型 true选中,false未选中 -->
                <input type="checkbox" v-model="checked">
            </div>
        </div>
        <!-- 第3步:实例化vue -->
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    // 单个复选框一定要用布尔类型
                    checked: false
                },
                methods: {

                }
            })
        </script>
    </body>
</html>

注意:单个复选框,在数据源中定义的数据类型为布尔类型:true 选中,false未选中

3.4 实现多个复选框

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>vue学习使用</title>
  <!-- 第1步: 引入vue库文件 -->
  <script src="./js/vue.js"></script>
</head>
<body>
  <!-- 第2步:挂载点 -->
  <div id="app">
    <div>
      <!-- 
      -->
      <ul>
        <li>
          <input type="checkbox" value="html" v-model="lessons">html
        </li>
        <li>
          <input type="checkbox" value="CSS" v-model="lessons">css
        </li>
        <li>
          <input type="checkbox" value="js" v-model="lessons">js
        </li>
      </ul>
      <hr>
      <div>{{lessons}}</div>
    </div>
  </div>
  <!-- 第3步:实例化vue -->
  <script>
    const vm = new Vue({
      el: '#app',
      data: {
        // 默认选中
        lessons: ["js",'css']
      },
      methods: {
      }
    })
  </script>
</body>
</html>

注意:多个复选框,数据源中定义的数据类型为数组,标签中需要指定它的value值。

3.5 实现复选框全选

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <!-- 第1步: 引入vue库文件 -->
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <!-- 第2步:挂载点 -->
        <div id="app">
            <div>
                <input type="checkbox" v-model="checked" @change="onSelected">
                <hr>
                <ul>
                    <li>
                        <input type="checkbox" value="html" @change="selectlesson" v-model="lessons">html
                    </li>
                    <li>
                        <input type="checkbox" value="css" @change="selectlesson" v-model="lessons">css
                    </li>
                    <li>
                        <input type="checkbox" value="js" @change="selectlesson" v-model="lessons">js
                    </li>
                </ul>
                <hr>
                <div>{{lessons}}</div>
            </div>
        </div>
        <!-- 第3步:实例化vue -->
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    lessons: [],
                    checked: false
                },
                methods: {
                    onSelected(evt) {
                        // 选中了
                        if (evt.target.checked) {
                            this.lessons = ["js", 'html', 'css']
                        } else {
                            this.lessons = []
                        }
                    },
                    selectlesson() {
                        // 只要来操作数据源就可以改变视图
                        this.checked = this.lessons.length == 3
                    }
                }
            })
        </script>
    </body>
</html>

3.6 单选和下拉

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <!-- 第1步: 引入vue库文件 -->
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <!-- 第2步:挂载点 -->
        <div id="app">
            <div>
                <h3>{{sex}} -- {{city}}</h3>
                <!-- 定义的数据类型为字符串 -->
                <label>
                    <input type="radio" value="先生" v-model="sex">建行
                </label>
                <label>
                    <input type="radio" value="女神" v-model="sex">招行
                </label>
            </div>
            <hr>
            <div>
                <select v-model="city">
                    <option value="0">==选择==</option>
                    <option value="wh">芜湖</option>
                    <option value="bj">北京</option>
                </select>
            </div>
        </div>
        <!-- 第3步:实例化vue -->
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    sex: '先生',
                    city: '0'
                }
            })
        </script>
    </body>
</html>

注意:单选框和复选框都需要 input 标签提供 value 属性。

4. v-model修饰符

4.1 lazy

作用:延时更新数据源中的数据,失去焦点时触发更新。

<div id="app">
    <!-- v-model修饰符 -->
    <!-- 延时更新数据源中的数据 光标移开才会改变数据 -->
    <input v-model.lazy="title">
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            title: ''
        }
    })
</script>

4.2 trim

作用:自动过滤用户输入的首尾空白字符。

<div id="app">
    <!-- 去空格 trim -->
    <input v-model.trim="title">
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            title: ''
        }
    })
</script>

4.3 number

作用:输入值转为数值类型。

<div id="app">
    <!-- 转为数值 number -->
    <input type="number" v-model.number="n1">
    +
    <input type="number" v-model.number="n2">
    = {{n1+n2}}
</div>
<script>
    const vm = new Vue({
        el: '#app',
        data: {
            n1: 1,
            n2: 2
        }
    })
</script>

5. 案例

5.1 购物车

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <!-- 第1步: 引入vue库文件 -->
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <!-- 第2步:挂载点 -->
        <div id="app">
            <table border="1" width="600">
                <tr>
                    <th>序号</th>
                    <th>名称</th>
                    <th>单价</th>
                    <th>数量</th>
                    <th>操作</th>
                </tr>
                <tr v-for="item,index in carts">
                    <td>{{index+1}}</td>
                    <td>{{item.name}}</td>
                    <td>{{item.price}}</td>
                    <td>
                        <button @click="setNum(1,index)">+++</button>
                        <input type="number" v-model="item.num">
                        <button @click="setNum(-1,index)">---</button>
                    </td>
                    <td>
                        <button @click="del(index)">删除</button>
                    </td>
                </tr>
            </table>
            <hr>
            <h3>
                合计:
                {{totalPrice()}}
            </h3>

        </div>
        <!-- 第3步:实例化vue -->
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    carts: [
                        { id: 1, name: '小米12pro', price: 1, num: 1 },
                        { id: 2, name: '华为手机', price: 2, num: 1 },
                        { id: 3, name: '水果手机', price: 3, num: 1 },
                    ]
                },
                methods: {
                    setNum(n, index) {
                        this.carts[index].num += n
                        if (this.carts[index].num <= 1) this.carts[index].num = 1
                        if (this.carts[index].num >= 3) this.carts[index].num = 3
                        // 用最大值和最小值来限制它的范围,可以了解一下这种写法
                        // this.carts[index].num = Math.min(3, Math.max(1, this.carts[index].num))
                    },
                    totalPrice() {
                        // 聚合运算
                        return this.carts.reduce((prev, { price, num }) => {
                            prev += price * num
                            return prev
                        }, 0)
                    },
                    del(index) {
                        // 弹出确认框
                        confirm('确定删除') && this.carts.splice(index, 1)
                    }
                }
            })
        </script>
    </body>
</html>

5.2 购物车持久化

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>vue学习使用</title>
        <!-- 第1步: 引入vue库文件 -->
        <script src="./js/vue.js"></script>
    </head>
    <body>
        <!-- 第2步:挂载点 -->
        <div id="app">
            <table border="1" width="600">
                <tr>
                    <th>序号</th>
                    <th>名称</th>
                    <th>单价</th>
                    <th>数量</th>
                    <th>操作</th>
                </tr>
                <tr v-for="item,index in carts">
                    <td>{{index+1}}</td>
                    <td>{{item.name}}</td>
                    <td>{{item.price}}</td>
                    <td>
                        <button @click="setNum(1,index)">+++</button>
                        <input type="number" v-model="item.num">
                        <!-- <button @click="setNum(-1,item)">---</button> -->
                        <button @click="setNum(-1,index)">---</button>
                    </td>
                    <td>
                        <button @click="del(index)">删除</button>
                    </td>
                </tr>
            </table>
            <hr>
            <h3>
                合计:
                {{totalPrice()}}
            </h3>
        </div>
        <!-- 第3步:实例化vue -->
        <script>
            // 初始数据应该从本地存储中读取
            function getCarts() {
                return !window.localStorage.getItem('carts') ? [{ id: 1, name: '小米12pro', price: 1, num: 1 },
                                                                { id: 2, name: '华为手机', price: 2, num: 1 },
                                                                { id: 3, name: '水果手机', price: 3, num: 1 }] : JSON.parse(window.localStorage.getItem('carts'))
            }
            function setCarts(carts) {
                window.localStorage.setItem('carts', JSON.stringify(carts))
            }
            const vm = new Vue({
                el: '#app',
                data: {
                    carts: getCarts()
                },
                methods: {
                    setNum(n, index) {
                        this.carts[index].num += n
                        if (this.carts[index].num <= 1) this.carts[index].num = 1
                        if (this.carts[index].num >= 3) this.carts[index].num = 3
                        // 用最大值和最小值来限制它的范围,可以了解一下
                        // this.carts[index].num = Math.min(3, Math.max(1, this.carts[index].num))
                        setCarts(this.carts)
                    },
                    totalPrice() {
                        return this.carts.reduce((prev, { price, num }) => {
                            prev += price * num
                            return prev
                        }, 0)
                    },
                    del(index) {
                        if(confirm('确定删除')){
                            this.carts.splice(index, 1)
                            setCarts(this.carts)
                        }
                    }
                }
            })
        </script>
    </body>
</html>

到此这篇关于Vue v-model实现案例介绍的文章就介绍到这了,更多相关Vue v-model内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vuev-model实现案例介绍

本文链接: https://lsjlt.com/news/167185.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vuev-model实现案例介绍
    目录1. 概述2. 使用方法3. 案例3.1 用户登录3.2 todolist3.3 实现单个复选框3.4 实现多个复选框3.5 实现复选框全选3.6 单选和下拉4. v-model...
    99+
    2024-04-02
  • C++实现堆排序实例介绍
    目录概述:思路:代码:概述: 堆排序是利用构建“堆”的方法确定具有最大值的数据元素,并把该元素与最后位置上的元素交换。可将任意一个由n个数据元素构成的序列按照(a1,a2,...,...
    99+
    2024-04-02
  • React状态提升案例介绍
    目录1.介绍2.案例1.介绍 所谓 状态提升 就是将各个子组件的 公共state 提升到它们的父组件进行统一存储、处理(这就是所谓的”单一数据源“),负责se...
    99+
    2023-05-15
    React状态提升 React状态管理方案
  • java浮点类型案例介绍
      java浮点类型介绍在学习java开发中,那么java浮点类型是我们必不可少学习的知识点,下面介绍一下java浮点类型。1. float型常量:453.5439f,21379.987F,231.0f(小数表示法),2...
    99+
    2023-06-03
  • SpringCloudOpenFeign基本介绍与实现示例
    目录介绍常用注解代码实现注意事项介绍   在上面一篇介绍Nacos的文章最后,两个服务的相互调用是用的RestTemplate类完成的。但这种方式不是很推荐,更佳...
    99+
    2023-02-21
    SpringCloud OpenFeign SpringCloud OpenFeign使用
  • 用python实现词云效果实例介绍
    目录什么是词云一、特效预览二、程序原理三、程序源码总结什么是词云 词云其实就是就是对网络文本中出现频率较高的〝关键词〞予以视觉上的突出,形成〝关键词云层〞或〝关键词渲染〞从而过滤掉大...
    99+
    2024-04-02
  • Java RMI介绍(附实例)
    Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。(推...
    99+
    2018-06-08
    Java
  • Android Thread 介绍与实例
    Android中很重要的一个机制就是线程+消息,当然线程并不是android独有的,下面,简单的说说使用线程的时候应该注意的地方 我们采用最简单的方法来建立一个android的...
    99+
    2022-06-06
    Android
  • Java实现冒泡排序示例介绍
    何为冒泡排序 冒泡:就像气泡从水中冒出来一样 在冒泡排序中,最小数或最大数取决于您是按升序还是降序对数组进行排序,向上冒泡到数组的开头或结尾。 算法描述: 比较相邻的元素。如果第一个...
    99+
    2023-05-18
    Java冒泡排序 Java冒泡排序算法
  • mysql insert导致死锁的案例介绍
    本篇内容介绍了“mysql insert导致死锁的案例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两...
    99+
    2024-04-02
  • Python property装饰器使用案例介绍
    目录1.property2.property属性定义的两种方式3.案例1.property 装饰器:装饰器是在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加新功能的可调用...
    99+
    2024-04-02
  • SQL数据库十四种案例介绍
    数据表 PRAGMA foreign_keys = OFF; -- ---------------------------- -- Table structure for ...
    99+
    2024-04-02
  • 实例介绍php怎么实现留言功能
    PHP是一种十分流行的服务器端脚本语言,用于网站开发。它能够与HTML结合使用,并且非常适合用于处理Web表单数据,其中包括留言功能。下面我们来看一个简单的PHP留言功能的实现代码,它包括以下几个部分:创建留言表单留言需要用户输入标题和内容...
    99+
    2023-05-14
  • MyBatis复杂Sql查询实现示例介绍
    目录resultMap 结果映射准备数据多对一查询(association)一对多查询(collection)懒加载resultMap 结果映射 resultMap 元素是 MyBa...
    99+
    2022-12-27
    MyBatis Sql查询 MyBatis复杂Sql查询
  • Android中实现视差滚动示例介绍
    什么是视差滚动? 视差滚动原本是一个天文学术语,当我们观察星空的时候,离我们比较远的星星移动速度比较慢,离我们比较近的星星移动速度比较快,当我们坐在车上向车窗外看的时候也会有这种体验...
    99+
    2024-04-02
  • JavaScript基础介绍与实例
    一、什么是JavaScript JavaScript是一种具有面向对象能力的、解释性的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言。因为他不需要在...
    99+
    2024-04-02
  • OpenFeign实现携带请求头方案详细介绍
    目录1. 同步请求2. 异步请求在使用OpenFeign请求其他服务接口时,默认不携带header信息,这样就导致无法携带登录用户信息。要解决这个问题,下面分两种情况进行处理。 1....
    99+
    2022-11-21
    OpenFeign携带请求头 OpenFeign设置请求头
  • Android列表实现(1)_数组列表实例介绍
    最近开始学习android的ui,先上几个相关的例子,后续还会有更新。 代码如下:import android.app.ListActivity; import androi...
    99+
    2022-06-06
    数组 Android
  • java数组实现循环队列示例介绍
     从顶部进去数据,从底部出来数据,用数组实现队列,但是下面这个队列,只能进行一次存数值,取数值,不够完善。 import java.util.Scanner; pu...
    99+
    2024-04-02
  • JavaScript实现Ajax的介绍
    本篇内容主要讲解“JavaScript实现Ajax的介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript实现Ajax的介绍”吧!这里以表单为例说一下实现Ajax的步骤:先从表单...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作