Vue 表单输入

表单输入

v-model 本质上是语法糖,它负责监听用户输入并更新数据,从而达到数据双向绑定的效果。


文本

<div id="app">
    <!-- 变量给到 v-model 这样双向绑定就完成了-->
    <input type="text" v-model="message">
    <p>message = {{message}}</p>
</div>
const vm = new Vue({
    el:"#app",
    data:{
        message:"hello world."
    }
});


多行文本

这情况下没有 input 标签可用了,只能用 textarea,不过 v-model 的语法还是保持了一致。

<div id="app">
    <textarea v-model="message"></textarea>
    <p>message = {{message}}</p>
</div>


复选框

对于单个复选框来说绑定到一个 bool 值来代表是否选中是比较合适的,如果是多个复选框我们可以绑定到一个数组来解决问题。

<div id="app">
    <input type="checkbox" v-model="ischecked" value="设置了 v-model value 就是无效的初始值">
    <p>ischecked = {{ischecked}}</p>
</div>
const vm = new Vue({
    el:"#app",
    data:{
        ischecked:false
    }
});


<div id="app">
    <input type="checkbox" v-model="persons" value="张三岁">
    <input type="checkbox" v-model="persons" value="李四年">
    <input type="checkbox" v-model="persons" value="王五载">
    <p>persons = {{persons}}</p>
</div>
const vm = new Vue({
    el:"#app",
    data:{
        ischecked:false,
        persons:["张三岁"],
    }
});


单选框

<div id="app">
    <p>给他一亿:</p>
    <input type="radio" v-model="name" value="王多鱼" id="id1"><span>王多鱼</span><br>
    <input type="radio" v-model="name" value="王二小" id="id2"><span>王二小</span><br>
    <p>被选中的人: {{name}}</p>
</div>
const vm = new Vue({
    el:"#app",
    data:{
        ischecked:false,
        name:"王多鱼"
    }
});


选择框

选择框默认也是单选的。

<div id="app">
    <p>给他一亿:</p>
    <select v-model="name">
        <option disabled value="">请选择</option>
        <option value="多鱼">王多鱼</option>
        <option value="二小">王二小</option>
    </select>
    <p>被选中的人: {{name}}</p>
</div>


通过修改 html 属性可以把选择框变成多选的,这种结构下被选择的值保存在数组中是最合适的。

<div id="app">
    <p>给他一亿:</p>
    <select v-model="name" multiple>
        <option disabled value="">请选择</option>
        <option value="多鱼">王多鱼</option>
        <option value="二小">王二小</option>
    </select>
    <p>被选中的人: {{name}}</p>
</div>
const vm = new Vue({
    el:"#app",
    data:{
        ischecked:false,
        name:"" // 虽然这里设置成 [] 数组最为合适,我把默认值设置为 “” 是为了说明 vue 在我们选择完成之后自动的设置成合适的数据类型
    }
});


可以看到前面的例子中我们重复的写了多次的 option 借助 v-for & v-bind 我们可以把这些重复的内容消去。

<div id="app">
    <p>给他一亿:</p>
    <select v-model="picked" multiple>
        <option disabled value="">请选择</option>
        <option v-for="name in names" v-bind:value="name">{{name}}</option>
    </select>
    <p>被选中的人: {{picked}}</p>
</div>
const vm = new Vue({
    el:"#app",
    data:{
        ischecked:false,
        names:["张三岁","李四年","王五栽"],
        picked:"",
    }
});


修饰符

.number 可以帮我们完成自动的转型

<div id="app">
    今天已经 <input type="text" v-model.number="age"> 岁啦!
</div>

.trim 可以帮我们自动去年首尾两端的空格。

<div id="app">
    你的名字 <input type="text" v-model.trim="name">
    <p>Vue 会帮我们自动去空格 '{{name}}'</p>
</div>