zoukankan      html  css  js  c++  java
  • Vue-表单输入绑定

    表单输入绑定

    你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

    简单的说如果有这样一段模版

      <input v-model="doSomething" type="text"/>

    那么v-model的行为就比较类似:

    1   <input v-bind:value="doSomething" @input="doSomething= $event.target.value" type="text"/>

    关于$event的行为官方文档有介绍

    有时也需要在内联语句处理器中访问原生DoM事件,可以用特殊变量$event把它传入方法

    对于需要使用输入法 (如中文、日文、韩文等) 的语言,你会发现 v-model 不会在输入法组合文字过程中得到更新。如果你也想处理这个过程,请使用 input 事件。

    举个例子:

    使用IME输入法V-model语法糖不会像这样显示出来

    而是这样

     文本:

    <html>
      <head>
        <title>Vue文本</title>
        <script src="vue.js"></script>
        <style type="text/css">
        </style>
      </head>
      <body>
       <div id="example"> 
          <input v-model="message">
          <p>message is : {{ message }}</p>
       </div>
       <script>
        new Vue({
          el:"#example",
          data:{
            message:""
          }
        })
       </script>
      </body>
    </html>

    浏览器打开显示:

    多行文本:

     1 <html>
     2   <head>
     3     <title>Vue多行文本</title>
     4     <script src="vue.js"></script>
     5     <style type="text/css">
     6     </style>
     7   </head>
     8   <body>
     9    <div id="example"> 
    10       <textarea v-model="message"></textarea>
    11       <p>message is : {{ message }}</p>
    12    </div>
    13    <script>
    14     new Vue({
    15       el:"#example",
    16       data:{
    17         message:""
    18       }
    19     })
    20    </script>
    21   </body>
    22 </html>

    打开浏览器显示:

    复选框

    单个复选框,绑定到布尔值:

    1 <div id="example">
    2    <input type="checkbox" v-model="checked">
    3    <label> {{checked}} </label>
    4 </div>
    1 new Vue({
    2    el:"#example",
    3    data:{
    4     checked:false // 绑定到布尔值
    5    }
    6 })

    多个复选框,绑定到数组

    1 <div id="example">
    2    <input type="checkbox" value="baidu" v-model="checkedNames">
    3    <label> 百度 </label>
    4    <input type="checkbox" value="google" v-model="checkedNames">
    5    <label> 谷歌 </label>
    6    <input type="checkbox" value="360" v-model="checkedNames">
    7    <label> 360 </label>
    8    <p>您选择的是: {{ checkedNames }}</p>
    9 </div>
    1 new Vue({
    2    el:"#example",
    3    data:{
    4     checkedNames:[] // 绑定到数组
    5    }
    6 })

    浏览器打开显示

     单选按扭

    1 <div id="example">
    2    <input type="radio" value="one" v-model="picked">
    3    <label>One</label>
    4    <input type="radio" value="Two" v-model="picked">
    5    <label>Two</label>
    6    <p>你选择的是:{{ picked }}</p>
    7 </div>
    1 new Vue({
    2   el:"#example",
    3   data:{
    4     picked:""
    5   }
    6 })

     

     
    选择框

    1 <div id="example">
    2    <select v-model="selected">
    3      <option value="" disabled>请选择</option>
    4      <option>语文</option>
    5      <option>数学</option>
    6      <option>英语</option>
    7    </select><br>
    8    <span>你选中的是:{{ selected }}</span>
    9 </div>
    1 new Vue({
    2   el:"#example",
    3   data:{
    4     selected:""
    5   }
    6 })

    打开浏览器显示:

     如果 v-model 表达式的初始值未能匹配任何选项,<select> 元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。因此,更推荐像上面这样提供一个值为空的禁用选项。

    多选时 (绑定到一个数组):

    1 <div id="example">
    2    <select v-model="selected" multiple>
    3      <option value="" disabled>请选择</option>
    4      <option>语文</option>
    5      <option>数学</option>
    6      <option>英语</option>
    7    </select><br>
    8    <span>你选中的是:{{ selected }}</span>
    9 </div>
    1 new Vue({
    2   el:"#example",
    3   data:{
    4     selected:[]
    5   }
    6 })

    用 v-for 渲染的动态选项:

    1 <div id="app">
    2   <select v-model="seleted">
    3      <option v-for="item in items" :value="item.value">
    4         {{ item.text }} 
    5      </option>
    6   </select>
    7   <p>当前考得分数的是:{{ seleted }}</p>
    8 </div>
     1 new Vue({
     2    el:"#app",
     3    data:{
     4      seleted:"90",
     5      items:[
     6        {text:"语文",value:"90"},
     7        {text:"数学",value:"88"},
     8        {text:"英语",value:"70"}
     9      
    10      ]
    11    }
    12 })

    值绑定

    对于单选按钮,复选框及选择框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值):

    <!-- 当选中时,`picked` 为字符串 "a" -->
    <input type="radio" v-model="picked" value="a">

    <!-- `toggle` 为 true 或 false -->
    <input type="checkbox" v-model="toggle">

    <!-- 当选中第一个选项时,`selected` 为字符串 "abc" -->
    <select v-model="selected">
    <option value="abc">ABC</option>
    </select>

    但是有时我们可能想把值绑定到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。

  • 相关阅读:
    Shell脚本查看apk签名信息
    Android Studio中的六种依赖
    Gradle build设置自动log开关
    转-Android Studio系列教程六--Gradle多渠道打包
    经验分享
    Android Studio build dex jar
    iPhone6搜索如何打开?详细使用方法
    Android Studio 简单设置
    Android Studio常见问题 -- uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library
    iOS开发学习记录【整理】
  • 原文地址:https://www.cnblogs.com/qjuly/p/8638792.html
Copyright © 2011-2022 走看看