• v-model的使用


     目录

    一、v-model 的原理

    二、v-model 结合radio 使用

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

    四、v-model 结合checkbox 多选使用

    五、v-model 结合select 使用

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


    一、v-model 的原理

    v-model指令用来实现表单元素和数据的双向绑定,等价于v-bind和v-on共同作用监听绑定数据;v-bind绑定value属性的值;v-on绑定input事件监听到函数中,函数会获取最新的值赋值到绑定的属性中

              v-model="msg"/>

             

    {{msg}}

           

           

           

    ​ v-model双向绑定,既输入框的value改变,对应的message对象值也会改变,修改message的值,input的value也会随之改变。无论改变那个值,另外一个值都会变化。 

    同理于:

                @input="changeValue" :value="msg"/>

               

    {{msg}}

           

           

    v-model = v-bind + v-on,实现双向绑定需要是用v-bind和v-on,使用v-bind给input的value绑定message对象,此时message对象改变,input的值也会改变。但是改变input的value并不会改变message的值,此时需要一个v-on绑定一个方法,监听事件,当input的值改变的时候,将最新的值赋值给message对象。$event获取事件对象,target获取监听的对象dom,value获取最新的值。 

     实现效果:

    二、v-model 结合radio 使用

     radio单选框的name属性是互斥的,如果使用v-model,可以不使用name就可以互斥。

    使用name 属性时,属性值要一样,因为系统判定要选的是男还是女,是互斥的结果,如果属性值不一样,则选框男女都可以选。

               

                   

               

               

                   

               

       

           

           

           

       

       

           

               

                   

               

               

                   

               

               

    你选择的性别是:{{sex}}

           

           

       

     v-model绑定`sex`属性,初始值为“男”,选择女后`sex`属性变成“女”,因为此时是双向绑定。

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

    ​ checkbox可以结合v-model做单选框,也可以多选框。这里做单选用时:

    用一个动态的值来控制其状态

    1. DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title>title>
    6. <script src="js/vue.js" type="text/javascript" charset="utf-8">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. <label for="agree">
    11. <input type="checkbox" id="agree" v-model="isAgree">同意协议
    12. label>
    13. <div style="margin:20px 0 0 0;">
    14. <button type="button" :disabled="!isAgree">下一步button>
    15. div>
    16. div>
    17. <script>
    18. const vm = new Vue({
    19. el: '#app',
    20. data() {
    21. return {
    22. isAgree:false
    23. }
    24. },
    25. watch:{
    26. /* isAgree(n,o){
    27. console.log(n);
    28. console.log(o);
    29. } */ //监听 isAgree 值的变化,但监听不到第一次的值
    30. isAgree:{
    31. handler(n,o){
    32. console.log(n);
    33. console.log(o);
    34. },
    35. immediate:true //立即监听isAgree的值,从第一次的值开始
    36. }
    37. }
    38. })
    39. script>
    40. body>
    41. html>

     呦呦鹿鸣

    四、v-model 结合checkbox 多选使用

    1. DOCTYPE html>
    2. Title
    3. 多选框

    4. 篮球
    5. 足球
    6. 羽毛球
    7. 乒乓球
    8. 你的爱好是:{{hobbies}}

  • 还可以:

    值的绑定:

    原理:遍历数组的值,动态的监听绑定数组的值放置空数组里(v-model选定的值,每点一次会有一个value值,把value响应的值给v-model绑定的值—响应式原理可以解释)

    1. DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title>title>
    6. <script src="js/vue.js" type="text/javascript" charset="utf-8">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. <label :for="item" v-for="(item,index) in hhobbies" :key="index">
    11. <input type="checkbox" :id="item" :value="item" v-model="hobbies">{{item}}
    12. label>
    13. 您的选择是:<h2>{{hobbies}}h2>
    14. div>
    15. <script>
    16. const vm = new Vue({
    17. el: '#app',
    18. data() {
    19. return {
    20. hobbies: [],
    21. hhobbies: ["篮球", "足球", "乒乓球", "羽毛球"]
    22. }
    23. }
    24. })
    25. script>
    26. body>
    27. html>
    1. checkbox结合v-model实现单选框,定义变量isAgree初始化为false,点击checkbox的值为trueisAgree也是true
    2. checkbox结合v-model实现多选框,定义数组对象hobbies,用于存放爱好,将hobbies与checkbox对象双向绑定,此时选中,一个多选框,就多一个true,hobbies就添加一个对象。

    五、v-model 结合select 使用

    1. DOCTYPE html>
    2. <html>
    3.     <head>
    4.         <meta charset="utf-8" />
    5.         <title>title>
    6.         <script src="../vue.js" type="text/javascript" charset="utf-8">script>
    7.     head>
    8.     <body>
    9.         <div id="app">
    10.             <select name="fruit" v-model="fruit">
    11.                 <option value="苹果">苹果option>
    12.                 <option value="香蕉">香蕉option>
    13.                 <option value="西瓜">西瓜option>
    14.             select>
    15.             您的选择是:{{fruit}}
    16.         div>
    17.         <script>
    18.             const vm = new Vue({
    19.                 el: '#app',
    20.                 data() {
    21.                     return {
    22.                         fruit:'苹果'
    23.                     }
    24.                 }
    25.             })
    26.         script>
    27.     body>
    28. html>

    用v-on 和v-bind 来写:

    1. DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title>title>
    6. <script src="../vue.js" type="text/javascript" charset="utf-8">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. <select name="fruit" :value="fruit" @input="change">
    11. <option value="苹果">苹果option>
    12. <option value="香蕉">香蕉option>
    13. <option value="西瓜">西瓜option>
    14. select>
    15. 您的选择是:{{fruit}}
    16. div>
    17. <script>
    18. const vm = new Vue({
    19. el: '#app',
    20. data() {
    21. return {
    22. fruit:'苹果',
    23. }
    24. },
    25. methods:{
    26. change(e){
    27. console.log(e);
    28. this.fruit = e.target.value
    29. }
    30. }
    31. })
    32. script>
    33. body>
    34. html>

    ​ v-model结合select可以单选也可以多选。 

     

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

    1. DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title>title>
    6. <script src="../vue.js" type="text/javascript" charset="utf-8">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. <input type="text" v-model="message" />
    11. <h2>{{message}}h2>
    12. <input type="text" v-model="age" />
    13. <h2>{{age}}---{{typeof age}}h2>
    14. <input type="text" v-model="name" />
    15. <h2>{{name}}h2>
    16. div>
    17. <script>
    18. const vm = new Vue({
    19. el: '#app',
    20. data() {
    21. return {
    22. message: "zzz",
    23. age: 18,
    24. name: "ttt"
    25. }
    26. }
    27. })
    28. script>
    29. body>
    30. html>
    1. lazy:默认情况下是实时更新数据,加上lazy,从输入框失去焦点,按下enter都会更新数据。
    2. number:默认是string类型,使用number复制为number类型。
    3. trim:用于自动过滤用户输入的首尾空白字符
    1. DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title>title>
    6. <script src="../vue.js" type="text/javascript" charset="utf-8">script>
    7. head>
    8. <body>
    9. <div id="app">
    10. <input type="text" v-model.lazy="message" />
    11. <h2>{{message}}h2>
    12. <input type="text" v-model.number="age" />
    13. <h2>{{age}}---{{typeof age}}h2>
    14. <input type="text" v-model.trim="name" />
    15. <h2>{{name}}h2>
    16. div>
    17. <script>
    18. const vm = new Vue({
    19. el: '#app',
    20. data() {
    21. return {
    22. message: "zzz",
    23. age: 18,
    24. name: "ttt"
    25. }
    26. }
    27. })
    28. script>
    29. body>
    30. html>

     

     从以上两幅图可以看出v-model 修饰符的作用。

  • 相关阅读:
    Eyeshot 2022.3 Fem Released Crack
    RPC与微服务
    ansible第一天
    TBOX开发需求说明
    从零用VitePress搭建博客教程(6) -– 第三方组件库的使用和VitePress搭建组件库文档
    基本数据类型和对应的包装类
    基于java+springboot+vue实现的在线试题库系统(文末源码+Lw)108
    Spring Data Elasticsearch集成SpringBoot 2.3.12.RELEASE
    如何使用腾讯云轻量服务器以及WooCommerce 应用镜像搭建跨境电商独立站!
    【论文|复现]Vertebra-Focused Landmark Detection For Scoliosis Assessment
  • 原文地址:https://blog.csdn.net/qq_53841687/article/details/126161660