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


相关文章
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
741 161
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
1292 159
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
1016 158
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
435 56
|
JavaScript 前端开发 UED
vue2和vue3的响应式原理有何不同?
大家好,我是V哥。本文详细对比了Vue 2与Vue 3的响应式原理:Vue 2基于`Object.defineProperty()`,适合小型项目但存在性能瓶颈;Vue 3采用`Proxy`,大幅优化初始化、更新性能及内存占用,更高效稳定。此外,我建议前端开发者关注鸿蒙趋势,2025年将是国产化替代关键期,推荐《鸿蒙 HarmonyOS 开发之路》卷1助你入行。老项目用Vue 2?不妨升级到Vue 3,提升用户体验!关注V哥爱编程,全栈开发轻松上手。
1025 2
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。