Vue.js实例学习:表单输入绑定

15 篇文章 1 订阅

一、基础用法

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

1、 文本

这里v-model指令与数据message相绑定 并 实时监听用户的输入事件以更新message数据并展示。

<div id="app">
  <!--这里value表面上并未生效,但实际以后运用的地方会很多-->
  <input v-model="message" placeholder="edit me" value="input" type="text"></input>
  <p>Message is:{{message}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    message:""
  },
});
</script>

效果:在input里输入内容,下面Message实时动态更新
这里写图片描述
这里写图片描述

2、多行文本

<div id="app">
  <textarea v-model="message" placehoder="edit me"></textarea>
  <!-- white-space: nowrap,规定段落中的文本不进行换行 -->
  <p style="white-space: nowrap">Message:{{message}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    message:""
  },
});
</script>

效果:在textarea里输入内容,下面Message实时动态更新
这里写图片描述
这里写图片描述

3、复选框

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

<div id="app">
      <input type="checkbox" id="checkbox" v-model="checkmessage"></input>
      <label for="checkbox">{{checkmessage}}</label>
  </div>
  <script type="text/javascript">
  var vm = new Vue({
    el:"#app",
    data:{
      checkmessage:false
    },
  });
  </script>

效果图:开始只有false.
这里写图片描述
选中false后,变为ture
这里写图片描述
(2)多个复选框,绑定到同一个数组:

<div id="app">
    <input type="checkbox" id="bty" v-model="checkName" value="bty"></input>
    <label for="bty">bty</label>
    <input type="checkbox" id="js" v-model="checkName" value="js"></input>
    <label for="js">js</label>
    <p>checkName:{{checkName}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    checkName:["hhh"],//checkName:[]同理
  },
});
</script>

效果:点击下面复选框,观察checkName值的变化
这里写图片描述
这里写图片描述
这里写图片描述

4、单选按钮

<div id="app">
  <input type="radio" v-model="message" id="one" value="one"></input>
  <label for="one">one</label>
  <input type="radio" v-model="message" id="two" value="two"></input>
  <label for="two">two</label>
  <p>你选择的是:{{message}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    message:""
  },
});
</script>

效果图:道理同上
这里写图片描述
这里写图片描述

5、选择框

(1)一个选项时:
直接在select中绑定数据,option数据就是绑定数据。

<div id="app">
  <select v-model="myseleted">
    <option disabled value="">请选择</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  <p>{{myseleted}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    myseleted:""
  },
});
</script>

效果图:
这里写图片描述
这里写图片描述
(2)多选时 (绑定到一个数组):

<div id="app">
  <select v-model="myseleted" multiple>
    <option disabled value="">请选择</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  <p>{{myseleted}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    myseleted:[]
  },
});
</script>

效果图:选择前:
这里写图片描述
多选后:
这里写图片描述

二、值绑定

对于单选按钮,复选框及选择框的选项,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 实现,并且这个属性的值可以不是字符串。

例1、单选按钮

<div id="app">
  <input id="my" type="radio" v-model="pick" v-bind:value="newdata"></input>
  <label for="my">my</label>
  <p>{{pick}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    pick:"",
    newdata:"i am newdata"
  },
});
</script>

效果:点击后,pick值改变,实际中应用中再将newdata整为变量即可真正的动态变化。
这里写图片描述
这里写图片描述
例2、选择框的选项

<div id="app">
  <select v-model="pick">
    <option disabled value="">请选择</option>
    <option :value="message.one">1</option>
    <option :value="message.two">2</option>
    <option :value="message.three">3</option>
  </select>
  <p>{{pick}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    pick:"i am old pick data",
    message:{
      one:1,
      two:2,
      three:3
    }
  },
});
</script>

这里写图片描述
这里写图片描述
例3、复杂的Dome

<div id="example">
  <h3>单选按钮</h3>
  <div v-show="items.length!=0">
    <ul>
      <li v-for="(item,index) in items">
        <label :for="'radio-'+item.id" @click="setCheckValue(item)">
          <input type="radio" name="radio"
            :id="'radio-'+item.id"
            :data-id="'food-'+item.id" 
            :checked="index==0"
            :value="item.value"
            v-model="checkValue"></input>
          <span>{{item.value}}</span>
        </label>
      </li>
    </ul>
    <p>您选择了:<span>{{checkValue}}</span></p>
    <button @click="showCheck(checkId)">按钮</button><span>{{checkId}}</span>
  </div>
</div>
<script>
  var itemData = [
    {id: '11001', value: '香蕉'},
    {id: '11002', value: '苹果'},
    {id: '11003', value: '梨子'}, 
    {id: '11004', value: '葡萄'}
  ]
  var vm = new Vue({
    el: '#example',
    data: {
      items: '',
      checkValue: '',
      checkId: ''
    },
    methods: {
      initData: function () {
        var self = this;
        self.items = itemData;
        if (itemData.length != 0) {
          self.checkId = 'food-' + self.items[0].id;
          self.checkValue = self.items[0].value;  
        }
      },
      setCheckValue: function (item) {
        this.checkId = 'food-' + item.id;
      },
      showCheck: function () {
        console.log(this.checkId)
      }
    },
    mounted: function () {
      this.initData();
    }
})

</script>

效果:选择对应选项,下面的水果名 和 id都会实时变化。点击“按钮“控制台还会输出已选择水果的id.
这里写图片描述
这里写图片描述

三、修饰符

1、.lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

例子:
效果:聚焦在input输入时message不会实时动态更新,只有在input失去焦点时(即点击非input部分),message才会动态更新。

<div id="app">
  <input v-model.lazy="message" placeholder="edit me" type="text"></input>
  <p>Message is:{{message}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    message:""
  },
});
</script>
2、.number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

<input v-model.number="age" type="number">

例子:在input输入字符串12,但转换typeof后 变为 number

<div id="app">
  <input v-model.number="age" type="text"></input>
  <p>age is:{{typeof age}}</p>
</div>
<script type="text/javascript">
var vm = new Vue({
  el:"#app",
  data:{
    age:""
  },
});
</script>

这里写图片描述

3、.trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg">

四、在组件上使用 v-model

这一部分会在下一篇 “Vue.js实例学习:组件“ 讲。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值