Vue.js — 表单输入绑定

1.表单输入绑定

你可以用v-model指令在表单<input><textarea><select>元素上创建双向数据绑定。
v-model会忽略所有表单元素的valuecheckedselected特性的初始值而总是将 Vue 实例的数据作为数据来源。

1.1 文本

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">      
        <style>
            
        </style>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
		<div id="app">
			<!-- 文本 -->
			<input v-model="message1" placeholder="编辑...">
			<p>单行文本:{{ message1 }}</p>
			<!-- 多行文本 -->
			<textarea v-model="message2" placeholder="编辑..."></textarea>			
			<p style="white-space: pre-line;">多行文本:{{ message2 }}</p>
		</div>
        <script>
			new Vue({
				el: '#app',
				data: {
					message1: '',
					message2: ''
				}
			})
        </script>
    </body>
</html>

1.2 复选框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">      
        <style>
            
        </style>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
		<div id="app">
			<!-- 单个复选框 -->
			<input type="checkbox" id="checkbox" v-model="checked">
			<label for="checkbox">{{ checked }}</label>
			<br/><br/>
			<!-- 多个复选框 -->
			<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
			<label for="jack">Jack</label>
			<input type="checkbox" id="john" value="John" v-model="checkedNames">
			<label for="john">John</label>
			<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
			<label for="mike">Mike</label>
			<br/><br/>
			<span>选中的名字:{{ checkedNames }}</span>
		</div>
        <script>
			new Vue({
				el: '#app',
				data: {
					checked: true,
					checkedNames: []
				}
			})
        </script>
    </body>
</html>

1.3 单选按钮

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">      
        <style>
            
        </style>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
		<div id="app">
			<input type="radio" id="one" value="One" v-model="picked">
			<label for="one">One</label>			
			<input type="radio" id="two" value="Two" v-model="picked">
			<label for="two">Two</label>
			<br>
			<div style="margin: 5px;">选中的:{{ picked }}</div>
		</div>
        <script>
			new Vue({
				el: '#app',
				data: {
					picked: ''
				}
			})
        </script>
    </body>
</html>

1.4 选择框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">      
        <style>
            
        </style>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
		<div id="app">
			<select v-model="selected">
				<option disabled value="">请选择</option>
				<option>A</option>
				<option>B</option>
				<option>C</option>
			</select>
			<span>选择的:{{ selected }}</span>
		</div>
        <script>
			new Vue({
				el: '#app',
				data: {
					selected: ''
				}
			})
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">      
        <style>
            
        </style>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
		<div id="app">
			<select v-model="selected">
				<option v-for="option in options" v-bind:value="option.value">
					{{ option.text }}
				</option>
			</select>
			<span>选择的:{{ selected }}</span>
		</div>
        <script>
			new Vue({
				el: '#app',
				data: {
					selected: 'A',
					options: [
						{text: 'One', value: 'A'},
						{text: 'Two', value: 'B'},
						{text: 'Three', value: 'C'},
					]
				}
			})
        </script>
    </body>
</html>

1.5 值绑定

对于单选按钮,复选框及选择框的选项,v-model绑定的值通常是静态字符串(对于复选框也可以是布尔值)。
但是有时我们可能想把值绑定到 Vue 实例的一个动态属性上,这时可以用v-bind实现,并且这个属性的值可以不是字符串。

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

<!-- `toggle` 为 true 或 false -->
<!-- `toggle` 为 true 时选中,`toggle` 为 false 时未选中 -->
<input type="checkbox" v-model="toggle">

<!-- 当选中第一个选项时,`selected` 为字符串 "abc" -->
<select v-model="selected">
  <option value="abc">ABC</option>
</select>
<!-- 复选框 -->
<input type="checkbox" v-model="toggle" true-value="yes" false-value="no">
<script>
	// ...
	// 当选中时
	vm.toggle === 'yes'
	// 当没有选中时
	vm.toggle === 'no'
</script>

1.6 修饰符

  • .lazy
  • .number
  • .trim
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">      
        <style>
            
        </style>
        <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
		<div id="app">
			<input v-model.lazy="message1" placeholder="编辑...">
            <p>单行文本:{{ message1 }}</p>
			<input v-model.number="age" type="number">
			<p>{{ typeof age }}</p>
			<input v-model.trim="msg">
			<p>{{ msg }}</p>
		</div>
        <script>
			new Vue({
				el: '#app',
				data: {
					message1: '',
					age: 0,
					msg: ''
				}
			})
        </script>
    </body>
</html>

.lazy修饰符将input事件转变为change事件;.number修饰符将用户输入的值转为数值类型;.trim修饰符过滤用户输入的首尾空白字符。

参考:

posted @ 2021-01-21 15:14  gzhjj  阅读(222)  评论(0编辑  收藏  举报