Vue——04-02v-model的使用原理、结合radio、checkbox、checkbox(多选)、checked(值的绑定)、select以及修饰符的使用

简介: v-model的使用原理、结合radio、checkbox、checkbox(多选)、checked(值的绑定)、select以及修饰符的使用

一、v-model使用原理

v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。

先看一下简单的v-model使用

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title>v-model的基本使用</title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <h1>{{message}}</h1>
    <input type="text" v-model="message" />
    <input type="text"v-model="message" />
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      message:'Nanchen'
    },
    })
  </script>
  </body>
</html>

效果如下:

6e1e04bb4abd415ebc006c67d2b484e5.gif

为什么要用到v-model?

使用非常方便,提高前端开发效率。在view层,model层相互需要数据交互,即可使用v-model。

其使用原理:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title>v-model的使用原理</title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <h1>{{message}}</h1>
    <input type="text" @input="changeValue"  :value="message" />
    <!-- <input type="text"v-model="message" /> -->
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      message:'Nanchen'
    },
    methods:{
      changeValue(e){
      console.log(e);
      this.message = e.target.value
      }
    }
    })
  </script>
  </body>
</html>

oninput 事件在用户输入时触发。

详情请参考菜鸟教程oninput

效果与上图一致。

二、v-model结合radio单选按钮使用

以前写单选按钮:

<label for="one">
  <input type="radio" name="sex" id="one" value="男"/>男
</label>
<label for="two">
  <input type="radio" name="sex" id="two" value="女"checked="checked" />女
</label>
<h1></h1>

c527322db0ec415a92676a233529fdc0.png

现在要实现双向绑定功能,就是点击哪个性别就会显示在h1里

这里就可以把name去掉,添加v-model

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <label for="one">
    <input type="radio" id="one" value="男" v-model="sex" />男
    </label>
    <label for="two">
    <input type="radio" id="two" value="女" v-model="sex"/>女
    </label>
    <h5>{{sex}}</h5>
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      sex:'男'
    },
    })
  </script>
  </body>
</html>

ac29db16d0f949c885e1eab29769e115.gif

三、v-model结合checkbox类型的使用

这里实现一个同意协议的小功能,先看效果:

11436b5fd49541db915ab2b47d9437f9.gif

代码如下:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <h1>复选框</h1>
    <label for="one">
    <input type="checkbox"id="one" v-model="isAgree" />同意协议
    </label>
    <br>
    您选择的是:{{isAgree}}
    <br>
    <button type="button" :disabled="!isAgree">下一步</button>
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      isAgree:true
    },
    })
  </script>
  </body>
</html>

四、v-model结合checkbox类型使用(多选)

先看实现效果:

f59fcf602bc54a66b0733eb1ffbdebed.gif

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <label for="hobby">
    <input type="checkbox" id="hobby" value="篮球" v-model="hobbies">篮球
    </label>
    <label for="hobby1">
    <input type="checkbox" id="hobby1" value="足球" v-model="hobbies">足球
    </label>
    <label for="hobby2">
    <input type="checkbox" id="hobby2" value="羽毛球" v-model="hobbies">羽毛球
    </label>
    <label for="hobby3">
    <input type="checkbox" id="hobby3" value="排球" v-model="hobbies">排球
    </label>
    <h2 v-show="hobbies.length>0">{{hobbies}}</h2>
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el: '#app',
    data: {
      hobbies:[]
    },
    })
  </script>
  </body>
</html>

五、v-model结合checkbox类型使用(值的绑定)

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <label :for="index" v-for="(item,index) in arr" :key="index">
    <input type="checkbox" :name="'hobby'+index"  :id="index" :value="item" v-model="hobbies"  />
    {{item}}
    </label>
    <h2 v-if="hobbies.length>0">{{hobbies}}</h2>
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      hobbies:[],
      arr:['篮球','足球','羽毛球','排球'],
    },
    })
  </script>
  </body>
</html>

f59fcf602bc54a66b0733eb1ffbdebed.gif

8ca3adc8731549c1a1e961ffacfda6ba.png

六、v-model结合select

1.select单选

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title>select单选</title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <select name="fruit" v-model="fruit">
    <option value="苹果">苹果</option>
    <option value="橘子">橘子</option>
    <option value="水蜜桃">水蜜桃</option>
    <option value="橙子">橙子</option>
    </select>
    <h3>你选择的水果有:{{fruit}}</h3>
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      fruit:'苹果',
    },
    })
  </script>
  </body>
</html>

效果如下:

6acf806a640848b498c46402ade5be6b.gif

2.select多选

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title>select多选</title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  </head>
  <body>
  <div id="app">
    <select name="fruits" v-model="fruits" multiple="multiple">
    <option value="苹果">苹果</option>
    <option value="橘子">橘子</option>
    <option value="水蜜桃">水蜜桃</option>
    <option value="橙子">橙子</option>
    </select>
    <h3 v-show="fruits.length>0">你选择的水果有:{{fruits}}</h3>
  </div>
  <script type="text/javascript">
    const vm = new Vue({
    el:'#app',
    data:{
      fruits:[],
    },
    })
  </script>
  </body>
</html>

效果如下:

1991e303801e4e7b8f5b8136fc1aa438.gif

七、v-model的修饰符的使用

v-model的修饰符:

1、v-model.lazy         只有在input输入框发生一个blur时才触发

2、v-model.trim         将用户输入的前后的空格去掉

3、v-model.number         将用户输入的字符串转换成number

这里看这个例子

v-model.lazy        

只有在input输入框发生一个blur时才触发

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <div id="app">
   <h2>{{message}}</h2>
          <input type="text" v-model.lazy="message"/>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  <script>
    const app = new Vue({
    el: "#app",
    data: {
      message:'Nan',
      age:30,
      name:'chen'
    },
    })
  </script>
  </body>
</html>

效果如下:

4a2afe3ff48b452babe1cbac7d9b0d41.gif

v-model.number :不可以输入字符串

看例子:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <div id="app">
     <input type="number" v-model.number="age" />
     <h2>{{age}}----{{typeof age}}</h2>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  <script>
    const app = new Vue({
    el: "#app",
    data: {
      message:'Nan',
      age:30,
      name:'chen'
    },
    })
  </script>
  </body>
</html>

效果如下:这里输入字符串是输入不了的

8bf671e4397b4abf97ce77c301c6b8cc.gif

v-model.trim

去除前后空格

代码如下:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <div id="app">
     <input type="text" v-model.trim="name">
    <h2>{{name}}</h2>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  <script>
    const app = new Vue({
    el: "#app",
    data: {
      message:'Nan',
      age:30,
      name:'chen'
    },
    })
  </script>
  </body>
</html>

效果如下图:

5296b01674124ad9ac28bf2ab902c0ce.gif


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
25天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
1天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
25天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
27天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
28天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
32 1
vue学习第一章
|
28天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
26 1
vue学习第三章
|
28天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章
|
28天前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
24 1
vue学习第7章(循环)
|
28天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
29 1
vue学习第九章(v-model)
|
28天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
39 1
vue学习第十章(组件开发)