基础语法

        可以用v-model指令在表单控件元素上创建双向数据绑定,根据控件类型它自动选取正确的方法更新元素。
text
   
   
  1. <span>Message is: {{ message }}</span>
  2. <input type="text" v-model="message" placeholder="edit me">
Multiline text
    
    
  1. <p>{{ message }}</p>
  2. <textarea v-model="message" placeholder="add multiple lines"></textarea>
checkbox
       单个勾选框,逻辑值:
   
   
  1. <input type="checkbox" id="checkbox" v-model="checked">
  2. <label for="checkbox">{{ checked }}</label>//显示勾选状态,false或true
        多个勾选框,绑定到同一个数组:
   
   
  1. <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
  2. <label for="jack">Jack</label>
  3. <input type="checkbox" id="john" value="John" v-model="checkedNames">
  4. <label for="john">John</label>
  5. <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
  6. <label for="mike">Mike</label>
  7. <br>
  8. <span>Checked names: {{ checkedNames | json }}</span>
  9. new Vue({
  10.   el: '...',
  11.   data: {
  12.     checkedNames: []
  13.   }
  14. })
radio
    
    
  1. <input type="radio" id="one" value="One" v-model="picked">
  2. <label for="one">One</label>
  3. <input type="radio" id="two" value="Two" v-model="picked">
  4. <label for="two">Two</label>
  5. <span>Picked: {{ picked }}</span>
  6. var vm = new Vue({
  7.    el : "#app",
  8.    data:{
  9.   picked:''
  10. }
  11. })
select
       单选:
   
   
  1. <select v-model="selected">
  2.   <option selected>A</option>
  3.   <option>B</option>
  4.   <option>C</option>
  5. </select>
  6. <span>Selected: {{ selected }}</span>
       多选(绑定到一个数组):
   
   
  1. <select v-model="selected" multiple>
  2.   <option selected>A</option>
  3.   <option>B</option>
  4.   <option>C</option>
  5. </select>
  6. <br>
  7. <span>Selected: {{ selected | json }}</span>
       动态选项(用v-for渲染):  
   
   
  1. <select v-model="selected">
  2.   <option v-for="option in options" v-bind:value="option.value">
  3.     {{ option.text }}
  4.   </option>
  5. </select>
  6. <span>Selected: {{ selected }}</span>
  7. new Vue({
  8.   el: '...',
  9.   data: {
  10.     selected: 'A',
  11.     options: [
  12.       { text: 'One', value: 'A' },
  13.       { text: 'Two', value: 'B' },
  14.       { text: 'Three', value: 'C' }
  15.     ]
  16.   }
  17. })

绑定value

       对于单选按钮,勾选框及选择框选项,v-model 绑定的 value 通常是静态字符串(对于勾选框是逻辑值):    
     
     
  1. <!-- 当选中时,`picked` 为字符串 "a" -->
  2. <input type="radio" v-model="picked" value="a">
  3. <!-- `toggle` true false -->
  4. <input type="checkbox" v-model="toggle">
  5. <!-- 当选中时,`selected` 为字符串 "abc" -->
  6. <select v-model="selected">
  7.   <option value="abc">ABC</option>
  8. </select>
       但是有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。
checkbox
   
   
  1. <input
  2.   type="checkbox"
  3.   v-model="toggle"
  4.   v-bind:true-value="a"
  5.   v-bind:false-value="b">
  6. // 当选中时
  7. vm.toggle === vm.a
  8. // 当没有选中时
  9. vm.toggle === vm.b
radio
   
   
  1. <input type="radio" v-model="pick" v-bind:value="a">
  2. // 当选中时
  3. vm.pick === vm.a
select options
   
   
  1. <select v-model="selected">
  2.   <!-- 对象字面量 -->
  3.   <option v-bind:value="{ number: 123 }">123</option>
  4. </select>
  5. // 当选中时
  6. typeof vm.selected // -> 'object'
  7. vm.selected.number // -> 123

参数特性

lazy
       在默认情况下,v-model 在input 事件中同步输入框值与数据,可以添加一个特性 lazy,从而改到在 change 事件中同步:
    
    
  1. <!-- "change" 而不是 "input" 事件中更新 -->
  2. <input v-model="msg" lazy>
number
       如果想自动将用户的输入转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个特性 number:
      
      
  1. <input v-model="age" number>
debounce
       debounce 设置一个最小的延时,在每次敲击之后延时同步输入框的值与数据。如果每次更新都要进行高耗操作(例如在输入提示中 Ajax 请求),它较为有用。
      
      
  1. <input v-model="msg" debounce="500">
       注意 debounce 参数不会延迟 input 事件:它延迟“写入”底层数据。因此在使用 debounce 时应当用 vm.$watch() 响应数据的变化。若想延迟 DOM 事件,应当使用 debounce 过滤器。

案例

  
  
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>PlayAround2 Have Fun</title>
  6.     <script src="https://cdn.jsdelivr.net/vue/1.0.26/vue.min.js"></script>
  7. </head>
  8. <body>
  9.     <div id="app">
  10.  
  11.         <h2>checkBox</h2>
  12.         <input type="checkbox" v-model="checked">
  13.         <label>{{checked}}</label>
  14.  
  15.         <h2>multi checkbox</h2>
  16.         <input type="checkbox" id="Kobe" value="Kobe" v-model="names">
  17.         <label for="Kobe">Kobe</label>
  18.         <input type="checkbox" id="Curry" value="Curry" v-model="names">
  19.         <label for="Curry">Curry</label>
  20.         <input type="checkbox" id="Aaron" value="Aaron" v-model="names">
  21.         <label for="Aaron">Aaron</label>
  22.         <br>
  23.         <span>Checked names: {{names | json}}</span>
  24.  
  25.         <h2>Radio</h2>
  26.         <input type="radio" id="one" value="one" v-model="picked">
  27.         <label for="one">one</label>
  28.         <br>
  29.         <input type="radio" id="two" value="two" v-model="picked">
  30.         <label for="two">two</label>
  31.         <br>
  32.         <span>Picked: {{picked}}</span>
  33.  
  34.         <h2>Select</h2>
  35.         <select v-model="selected">
  36.             <option selected>Kobe</option>
  37.             <option>Curry</option>
  38.             <option>Aaron</option>
  39.         </select>
  40.         <span>Selected: {{selected}}</span>
  41.  
  42.         <h2>Multi Select</h2>
  43.         <select multiple v-model="multiSelected">
  44.             <option>Kobe</option>
  45.             <option>Curry</option>
  46.             <option>Aaron</option>
  47.         </select>
  48.         <span>Selected: {{multiSelected}}</span>
  49.  
  50.  
  51.         <h2>Select with for</h2>
  52.         <select v-model="selectedPlayer">
  53.             <option v-for="option in options" :value="option.value">{{option.text}}</option>
  54.         </select>
  55.         <span>Selected: {{selectedPlayer}}</span>
  56.  
  57.         <h2>Lazy-改变更新的事件从input->change</h2>
  58.         <input v-model="msg" lazy>
  59.         <span>Msg:{{msg}}</span>
  60.  
  61.         <h2>Number</h2>
  62.         <input v-model="age" number>
  63.         <span>age:{{age}}</span>
  64.  
  65.         <h2>debounce-延迟更新view</h2>
  66.         <p>Edit me<input v-model="delayMsg" debounce="500"></p>
  67.         <span>delayMsg:{{delayMsg}}</span>
  68.  
  69.     </div>
  70.  
  71.     <script>
  72.         var vm = new Vue({
  73.             el:"#app",
  74.             data:{
  75.                 checked:false,
  76.                 names:[],
  77.                 picked:"",
  78.                 selected:"",
  79.                 multiSelected:"",
  80.                 options:[
  81.                     {text:"Kobe",value:"Bryant"},
  82.                     {text:"Stephen",value:"Curry"},
  83.                     {text:"Aaron",value:"Kong"}
  84.                 ],
  85.                 selectedPlayer:"",
  86.                 msg:"",
  87.                 age:"",
  88.                 delayMsg:""
  89.             }
  90.         })
  91.     </script>
  92. </body>
  93. </html>
Logo

前往低代码交流专区

更多推荐