vue学习笔记(六)表单输入绑定

我不是女神ヾ 2023-06-30 13:55 80阅读 0赞

前言

在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的,例如登陆、注册等等。但是直接提交的话可能存在恶意的行为,尽管服务器那边对我们提交的信息进行处理,但是无形之中还是会增加服务器的压力,为了减少服务器的压力,vue也提供了一系列简便的方法供我们使用,允许我们在提交信息的时候进行处理,确保数据的准确性,这样就可以大大的减少服务器的压力,那么一起来看看vue提供了那些便捷的方法吧!

基础用法

v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:

  • text 和 textarea 元素使用 value 属性和 input 事件。
  • checkbox 和 radio 使用 checked 属性和 change 事件。
  • select 字段将 value 作为 prop 并将 change 作为事件。

单行文本

  1. <input v-model="message" placeholder="edit me">
  2. <p>Message is: {
  3. { message }}</p>

实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>单行文本</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <input type="text" v-model="msg" />
  10. <p>{
  11. {msg}}</p>
  12. </div>
  13. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  14. <script type="text/javascript">
  15. const vm=new Vue({
  16. el:'#app',
  17. data:{
  18. msg:''
  19. },
  20. computed:{
  21. },
  22. methods:{
  23. }
  24. })
  25. </script>
  26. </body>
  27. </html>

结果:
在这里插入图片描述
单行文本的输入可以说是特别简单的吧!我相信在座的各位应该没有那个不会的吧!如果不会的话,只能用下面的表情来表示了。
在这里插入图片描述

多行文本

  1. <span>Multiline message is:</span>
  2. <p style="white-space: pre-line;">{
  3. { message }}</p>
  4. <br>
  5. <textarea v-model="message" placeholder="add multiple lines"></textarea>

实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>多行文本</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <span>{
  10. {msg}}</span><br />
  11. <textarea v-model="msg"></textarea>
  12. </div>
  13. <textarea>你好</textarea>
  14. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  15. <script type="text/javascript">
  16. const vm=new Vue({
  17. el:'#app',
  18. data:{
  19. msg:''
  20. },
  21. computed:{
  22. },
  23. methods:{
  24. }
  25. })
  26. </script>
  27. </body>
  28. </html>

结果:
在这里插入图片描述

复选框

复选框的话,从字面意思就可以看出来是可以选择多个,例如你的爱好有:吃饭,睡觉,打豆豆。
(1)单个复选框,绑定到布尔值:

  1. <input type="checkbox" id="checkbox" v-model="checked">
  2. <label for="checkbox">{
  3. { checked }}</label>

实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>单个复选框</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <input type="checkbox" value="小明" v-model="checked"/>
  10. <span>{
  11. {checked}}</span>
  12. </div>
  13. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  14. <script type="text/javascript">
  15. const vm=new Vue({
  16. el:'#app',
  17. data:{
  18. checked:true,
  19. },
  20. computed:{
  21. },
  22. methods:{
  23. }
  24. })
  25. </script>
  26. </body>
  27. </html>

结果:
在这里插入图片描述
在这里插入图片描述
(2)多个复选框,绑定到同一个数组:

  1. <div id='example-3'>
  2. <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
  3. <label for="jack">Jack</label>
  4. <input type="checkbox" id="john" value="John" v-model="checkedNames">
  5. <label for="john">John</label>
  6. <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
  7. <label for="mike">Mike</label>
  8. <br>
  9. <span>Checked names: {
  10. { checkedNames }}</span>
  11. </div>

实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>多个复选框</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. 苹果:<input type="checkbox" v-model="fruit" value="apple"/>
  10. 香蕉:<input type="checkbox" v-model="fruit" value="banana"/>
  11. 雪梨:<input type="checkbox" v-model="fruit" value="perl"/>
  12. <p>喜欢的水果有{
  13. {fruit}}</p>
  14. </div>
  15. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  16. <script type="text/javascript">
  17. const vm=new Vue({
  18. el:'#app',
  19. data:{
  20. fruit:[]
  21. },
  22. computed:{
  23. },
  24. methods:{
  25. }
  26. })
  27. </script>
  28. </body>
  29. </html>

结果:
在这里插入图片描述
单选框
通常单选框用于选定一种特定的情况,例如要么男,要么女。

  1. <div id="example-4">
  2. <input type="radio" id="one" value="One" v-model="picked">
  3. <label for="one">One</label>
  4. <br>
  5. <input type="radio" id="two" value="Two" v-model="picked">
  6. <label for="two">Two</label>
  7. <br>
  8. <span>Picked: {
  9. { picked }}</span>
  10. </div>

实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>单选框</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. 男:<input type="radio" value="男" v-model="checked"/>
  10. 女:<input type="radio" value="女" v-model="checked"/>
  11. <p>{
  12. {checked}}</p>
  13. </div>
  14. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  15. <script type="text/javascript">
  16. const vm=new Vue({
  17. el:'#app',
  18. data:{
  19. checked:''
  20. },
  21. computed:{
  22. },
  23. methods:{
  24. }
  25. })
  26. </script>
  27. </body>
  28. </html>

结果:
在这里插入图片描述
在这里插入图片描述
选择框
选择框就是我们通常所说的下拉列表,一般是选择城市之类的吧!反正也不一定主要看业务。

(1)单选时:

  1. <div id="example-5">
  2. <select v-model="selected">
  3. <option disabled value="">请选择</option>
  4. <option>A</option>
  5. <option>B</option>
  6. <option>C</option>
  7. </select>
  8. <span>Selected: {
  9. { selected }}</span>
  10. </div>

**
实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>下拉列表单选</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <select v-model="selected">
  10. <option value="" disabled="disabled">请选择</option>
  11. <option value="江西省">江西省</option>
  12. <option value="广东省">广东省</option>
  13. <option value="浙江省">浙江省</option>
  14. </select>
  15. 选择的省份是:<span>{
  16. {selected}}</span>
  17. </div>
  18. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  19. <script type="text/javascript">
  20. const vm=new Vue({
  21. el:'#app',
  22. data:{
  23. selected:''
  24. },
  25. computed:{
  26. },
  27. methods:{
  28. }
  29. })
  30. </script>
  31. </body>
  32. </html>

** 结果:**
在这里插入图片描述
(2)多选时 (绑定到一个数组):

  1. <div id="example-6">
  2. <select v-model="selected" multiple style="width: 50px;">
  3. <option>A</option>
  4. <option>B</option>
  5. <option>C</option>
  6. </select>
  7. <br>
  8. <span>Selected: {
  9. { selected }}</span>
  10. </div>

** 实例:**

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>下拉列表多选</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <select v-model="selected" multiple="multiple">
  10. <option value="" disabled="disabled">请选择</option>
  11. <option value="江西省">江西省</option>
  12. <option value="广东省">广东省</option>
  13. <option value="浙江省">浙江省</option>
  14. </select>
  15. 您选择的省份是:<span>{
  16. {selected}}</span>
  17. </div>
  18. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  19. <script type="text/javascript">
  20. const vm=new Vue({
  21. el:'#app',
  22. data:{
  23. selected:[]
  24. },
  25. computed:{
  26. },
  27. methods:{
  28. }
  29. })
  30. </script>
  31. </body>
  32. </html>

** 结果:**
在这里插入图片描述
当然我们也可以使用v-for来渲染选项。

实例

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <select v-model="selected">
  10. <option v-for="(city,index) of citys" v-bind:value="city.value">{
  11. {city.name}}</option>
  12. </select>
  13. 选择的城市是:{
  14. {selected}}
  15. </div>
  16. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  17. <script type="text/javascript">
  18. const vm=new Vue({
  19. el:'#app',
  20. data:{
  21. selected:'A',
  22. citys:[
  23. {name:'江西省',value:'江西省'},
  24. {name:'广东省',value:'广东省'},
  25. {name:'海南省',value:'海南省'},
  26. ]
  27. },
  28. computed:{
  29. },
  30. methods:{
  31. }
  32. })
  33. </script>
  34. </body>
  35. </html>

结果:
在这里插入图片描述

值绑定

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

  1. <!-- 当选中时,`picked` 为字符串 "a" -->
  2. <input type="radio" v-model="picked" value="a">
  3. <!-- `toggle` 为 true 或 false -->
  4. <input type="checkbox" v-model="toggle">
  5. <!-- 当选中第一个选项时,`selected` 为字符串 "abc" -->
  6. <select v-model="selected">
  7. <option value="abc">ABC</option>
  8. </select>

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

  1. <input
  2. type="checkbox"
  3. v-model="toggle"
  4. true-value="yes"
  5. false-value="no"
  6. >
  7. // 当选中时
  8. vm.toggle === 'yes'
  9. // 当没有选中时
  10. vm.toggle === 'no'

注意:
这里的 true-value 和 false-value 特性并不会影响输入控件的 value 特性,因为浏览器在提交表单时并不会包含未被选中的复选框。如果要确保表单中这两个值中的一个能够被提交,(比如“yes”或“no”),请换用单选按钮。
单选框

  1. <input type="radio" v-model="pick" v-bind:value="a">
  2. // 当选中时
  3. vm.pick === vm.a

选择框选项

  1. <select v-model="selected">
  2. <!-- 内联对象字面量 -->
  3. <option v-bind:value="{ number: 123 }">123</option>
  4. </select>
  5. // 当选中时
  6. typeof vm.selected // => 'object'
  7. vm.selected.number // => 123

修饰符

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

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

实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>.lazy修饰符</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <input type="text" v-model.lazy="msg"/>
  10. <p>{
  11. {msg}}</p>
  12. </div>
  13. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  14. <script type="text/javascript">
  15. const vm=new Vue({
  16. el:'#app',
  17. data:{
  18. msg:''
  19. },
  20. computed:{
  21. },
  22. methods:{
  23. }
  24. })
  25. </script>
  26. </body>
  27. </html>

结果:
在这里插入图片描述
这是实例当我们输入的时候,它不会立刻呈现出来,而是需要等待一会儿,因为我们加入了.lazy这个属性。
.number
如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

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

这通常很有用,因为即使在 type=“number” 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。
实例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>.number修饰符</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <input type="text" v-model.number="msg" type="number"/>
  10. <p>{
  11. {typeof msg}}</p>
  12. </div>
  13. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  14. <script type="text/javascript">
  15. const vm=new Vue({
  16. el:'#app',
  17. data:{
  18. msg:''
  19. },
  20. computed:{
  21. },
  22. methods:{
  23. }
  24. })
  25. </script>
  26. </body>
  27. </html>

结果:
在这里插入图片描述
.trim
如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

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

** 实例:**

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>.trim修饰符</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <input type="text" v-model.trim="msg"/>
  10. <p>我 {
  11. {msg}}</p>
  12. <input type="text" v-model.trim="name"/>
  13. <p>{
  14. {name}}</p>
  15. </div>
  16. <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
  17. <script type="text/javascript">
  18. const vm=new Vue({
  19. el:'#app',
  20. data:{
  21. msg:'我是一个好学生',
  22. },
  23. computed:{
  24. },
  25. methods:{
  26. }
  27. })
  28. </script>
  29. </body>
  30. </html>

** 结果:**
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Vue 输入

    基础用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神

    相关 Vue输入

            本博客记录了小编在学习Vue过程中的体会与感悟,简单来说就是小编的学习笔记,学习地址主要为Vue的官网,官网地址为:[《Vue官方文档》][Vue]。相关学习笔