Vue——表单与v-model

vue

1.基本用法

表单类控件承载了一个网页数据的录入与交互。
vue提供了v-model用于表单类元素上双向绑定数据.

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

</head>

<body>

<div id="app">

<input v-model="text" placeholder="输入..."></input>

<p>输入的内容是:</p>

<p style="white-space: pre">{{ text }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

text: ''

}

})

</script>

</body>

</html>

在输入框输入的同时,{{ message }}也会实时将内容渲染在视图中。
还可以使用@input来替代v-model。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<input type="text" @input="handleInput" placeholder="输入...">

<!--在使用v-model进行中文输入的时候,只有选定中文数据才会更新-->

<!--如果想实时更新的话可以使用@input,功能与v-model类似-->

<p>输入的内容是:{{ message }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

message: ''

},

methods: {

handleInput: function (e) {

this.message = e.target.value;

}

}

})

</script>

</body>

</html>

下面是几种常见的使用类型:

1)单选按钮

(1)单独使用

单选按钮在单独使用时,不需要v-model,直接使用v-bind绑定一个布尔值就可以。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title></title>

<script src="vue.min.js"></script>

</head>

<body>

<div id="app">

<input type="radio" :checked="picked">

<label>单选按钮</label>

</div>

<script>

var app = new Vue({

el: '#app',

data: {

picked: true

}

})

</script>

</body>

</html>

(2)组合使用

如果是组合使用来实现互斥选择的效果就需要v-model配合value来使用。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<input type="radio" v-model="picked" value="html" id="html">

<label for="html">HTML</label>

<br>

<input type="radio" v-model="picked" value="js" id="js">

<label for="html">JS</label>

<br>

<input type="radio" v-model="picked" value="css" id="css">

<label for="html">CSS</label>

<br>

<p>选择的项是:{{ picked }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

picked: 'js' //此处设置默认值

}

})

</script>

</body>

</html>

效果:

2)复选框

(1)单独使用

复选框单独使用使用时也是使用v-model加上一个布尔值来使用。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>复选框————单独使用</title>

<script src="vue.min.js"></script>

</head>

<body>

<div id="app">

<input type="checkbox" v-model="checked" id="checked">

<label for="checked">选择状态: {{checked}}</label>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

checked: false

}

})

</script>

</body>

</html>

效果:

(2)组合使用

组合使用时,也是v-model和value一起,多个勾选框都绑定到同一个数组类型的数据。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>复选框————组合使用</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<input type="checkbox" v-model="checked" value="html" id="html">

<label for="html">HTML</label>

<br>

<input type="checkbox" v-model="checked" value="js" id="js">

<label for="html">JS</label>

<br>

<input type="checkbox" v-model="checked" value="css" id="css">

<label for="html">CSS</label>

<br>

<p>选择的项是:{{ checked }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

checked: ['html']

}

})

</script>

</body>

</html>

效果:

3)选择列表

(1)单选

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<select v-model="selected">

<option>html</option>

<option>JavaScript</option>

<option>css</option>

</select>

<p>选择的选项是:{{ selected }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

selected: ''

}

})

</script>

</body>

</html>

效果:

如果<option>含有value属性,v-model就会优先匹配value的值,如果没有就会匹配<option>的text。

(2)多选

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<select v-model="selected" multiple>

<option>html</option>

<option>JavaScript</option>

<option>css</option>

</select>

<p>选择的选项是:{{ selected }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

selected: ''

}

})

</script>

</body>

</html>

效果:

(3)动态输出

在业务中经常使用的是v-for动态输出.

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

</head>

<body>

<div id="app">

<select v-model="selected">

<option v-for="option in options" :value="option.value">

{{ option.text }}

</option>

</select>

<p>选择的结果是: {{ selected }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

selected: 'html',

options: [

{

text: 'HTML',

value: 'html'

},

{

text: 'JS',

value: 'js'

},

{

text: 'CSS',

value: 'css'

}

]

}

})

</script>

</body>

</html>

效果:

2.绑定值

在业务中,有时候需要绑定一个动态的数据,这时候可以使用v-bind来实现.

1)单选按钮

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

</head>

<body>

<div id="app">

<input type="radio" v-model="picked" :value="value">

<label>单选按钮</label>

<p>{{ picked }}</p>

<p>{{ value }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

picked: false,

value: 123

}

})

</script>

</body>

</html>

效果:

2)复选框

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<input type="checkbox" v-model="toggle" :true-value="value1" :false-value="value2">

<label>复选框</label>

<p>{{ toggle }}</p>

<p>{{ value1 }}</p>

<p>{{ value2 }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

toggle: false,

value1: 'a',

value2: 'b'

}

})

</script>

</body>

</html>

效果:

3)选择列表

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<select v-model="selected">

<option :value="{ number: 123 }">123</option>

</select>

{{ selected.number }}

</div>

<script>

var app = new Vue({

el: "#app",

data: {

selected: ''

}

})

</script>

</body>

</html>

效果:

3.修饰符

与事件的修饰符类似,v-model也有修饰符,用于控制数据同步的时机。

1)lazy

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<!--v-model默认事在input事件中同步输入框的数据-->

<!--.lazy会转变为在change事件中同步-->

<input type="text" v-model.lazy="message">

<p>{{ message }}</p>

<!--message并不是实时改变,而是在失去焦点或者回车时才更新-->

</div>

<script>

var app = new Vue({

el: "#app",

data: {

message: ''

}

})

</script>

</body>

</html>

2)number

.number可以将输入转化为number类型。
虽然你输入的是数字,但是程序收到的却是字符串。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

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

<p>{{ typeof message }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

message: 123

}

})

</script>

</body>

</html>

3)trim

.trim:自动过滤字符串首尾的空格。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<script src="vue.min.js"></script>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>

<body>

<div id="app">

<input type="text" v-model.trim="message">

<p>{{ message }}</p>

</div>

<script>

var app = new Vue({

el: "#app",

data: {

message: ''

}

})

</script>

</body>

</html>

以上是 Vue——表单与v-model 的全部内容, 来源链接: utcz.com/z/379121.html

回到顶部