Vue.js入门系列(9)--表单操作2

  没错,你没看错,今天小编又为大家分享在Vue中有关表单的操作,上次主要为大家分享了v-model在text、textarea、checked、radio中的应用以及v-model的本质实际上是v-bind和v-on:input事件两个指令的结合。下面进一步为大家分享v-model在表单的操作

一、v-model 在select 中的应用

好多选框 checkbox类似,v-model在select中的应用也可以分为两类

1. 单选

<form action="" class="warp" >
    <select v-model="subject">
        <option value ="语文">语文</option>
        <option value ="数学">数学</option>
        <option value ="英语">英语</option>
        <option value ="化学">化学</option>
    </select>
    <p>你喜欢的科目是:{{subject}}</p>
</form>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                subject:''
            },
    })
</script>

单选.gif

  在这个例子中,当用户点击语文,就会将语文传递到model中的subject变量,从而实现页面到model的双向绑定。
要注意两点:
  第一点:v-model 要绑定在select中而不是option,option是作为select的选项,因为传递的数据是下拉框的内容而不是下拉框的选项,所以要将v-model绑定在select中
  第二点:保存的值是一个字符串

2.多选

<form action="" class="warp" >
    <select v-model="subject" multiple>
        <option value ="语文">语文</option>
        <option value ="数学">数学</option>
        <option value ="英语">英语</option>
        <option value ="化学">化学</option>
    </select>
    <p>你喜欢的科目是:{{subject}}</p>
</form>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                subject:[]
            },
    })
</script>

多选.gif

在这个例子中,用户按下Ctrl 键后可以进行多选
这里同样要注意两点:
  第一点:保存的值是数组,而不是简单的字符串。因为用户进行的是多选,提交到后台的数据应该是用户所选定的所有数据
  第二点:增加multiple。如果没有增加multiple无法实现同时选择多个的功能。
结合上面两大点进行一个总结:
  ① v-model绑定的位置:v-model绑定的位置在select而不是option
  ② 保存值的类型: 如果是单选,变量的类型是简单的字符串;如果是多选,变量的类型是数组
  ③ 实现多选的关键增加 multiple

二、值绑定

  相信很多读者跟小编一样,很困惑什么是值绑定,简单的说,就是动态的书写value的值

<form action="" class="warp" >
    <select v-model="subject" multiple>
        <option value ="语文">语文</option>
        <option value ="数学">数学</option>
        <option value ="英语">英语</option>
        <option value ="化学">化学</option>
    </select>
    <p>你喜欢的科目是:{{subject}}</p>
</form>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                subject:[]
            },
    })
</script>

  比如在这段代码中,我们是直接将value的值写成语文,数学,英语写死了,在正常的开发中,这些值应该从后台发送过来的数据获取,所以我们就需要根据后台发送过来的数据动态的追加这些value值。具体的用法如下:

首先,对原始数据的处理:

1.存放:在Vue实例的data中声明一个数组,用来存原始数据
2.取数:使用for 循环逐一遍历原始数组中的每个元素,并赋值给value

其次,和用户交互的数据

1.存放:在Vue实例的data中声明一个数组,用来存用户操作过的数据
2.显示:通过v-model达到双向绑定,将用户操作的数据显示在页面中
代码如下:

<form action="" class="warp" >
    <label for="" v-for="item in originSubject">
        <input type="checkbox" v-bind:value='item' v-model="newSubject">{{item}}
    </label>
    <p>你喜欢的科目是:{{newSubject}}</p> 
</form>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                originSubject:['语文','数学','英语','历史'],
                newSubject:[]
            },
    })
</script>

值绑定.gif

  在这个例子中,首先在data声明数组originSubject用来存放原始的数据,然后在label标签使用for循环遍历在originSubject数组中的数据并将数据传递到input的value值中,这是原始数据的操作;其次也在data中声明的newSubject用来存放用户操作过的数据,通过在input标签中使用v-model将用户操作过的数据显示在页面中,这是用户操作过的数据的处理。
  以上就是关于值绑定的小分享,说白了其实就是通过for循环来修改input中的value值

三、修饰符

  在事件监听的时候小编也为大家分享过一些时间有关的修饰符,这里的修饰符主要针对表单元素的修饰符,主要有三种:lazy、number、trim

1.lazy

① lazy出现的原因: v-model在事项双向数据绑定的时候会出现一个问题:一旦有数据发生改变,对应的data中的数据也会发生变化,修改的太频繁,比如:用户输入了6个a,每输入一个a都要重新修改message的值,而现实中我们只希望当用户输入完成的时候才修改相应的值,这个时候就出现了lazy修饰符

更新太频繁.gif

② 定义:让数据在失去焦点或者回车时才更新数据

<input type="text" v-model.lazy="message">
<p>{{message}}</p>
lazy.gif

由图可知,当输入框失去焦点时才将数据修改到data中

2.number

① number 出现的原因: 使用v-model传递的数据,不管输入的值字母还是数字,默认都是字符串类型,可以通过下面的例子进行理解:

<input type="text" v-model="age">
<p>年龄:{{age}}-{{typeof age}}</p>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                age:''
            },
    })
</script>
string类型.gif

  会发现即使输入的是数字,类型依旧是字符串类型。也有读者可能会问,是不是因为一开始就在data中定义了age为字符串类型,所以才会显示字符串类型,那么小编将age定义为number类型后:

<input type="text" v-model="age">
<p>年龄:{{age}}-{{typeof age}}</p>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                age:0
            },
    })
</script>

定义为number类型.gif

  可以看到,即使一开始将数据定义为number,但是经过v-model的双向绑定后依旧转换成了string类型,这就是在使用v-model时可能会出现的类型转换问题,如果想要输入的数字是number类型,可以通过.number修饰符
② 定义:将输入框内的内容转换成number类型

<input type="text" v-model.number="age">
<p>年龄:{{age}}-{{typeof age}}</p>
<script>
    var vm  = new Vue ({
        el:".warp",
        data:{
                age:0
            },
    })
</script>
转换成number类型.gif

在经过number修饰符的处理后,成功的将数字转换成了number类型

3.trim

① trim出现的原因:用户可能会在数据的首尾输入很多的空格,这个时候我们希望将空格去除,比如:

<input type="text" v-model="message">
<p>您输入的信息是:{{message}}</p>

image.png

  因为浏览器有空白折叠现象,不管输入多少个空格,都只能识别一个,所以我们通过下面的控制台来查看效果:
image.png

如果想要去除数据首尾的空格,可以直接通过trim修饰符去除
② 定义:去除数据首尾的空格

<input type="text" v-model.trim="message">
<p>您输入的信息是:{{message}}</p>

前后输入空格.png

去除空格.png

  要注意的是,trim去除的是数据首尾的空格,并不包括中间的空格
  以上就是小编今天为大家分享的表单的操作:在select中的应用、值的绑定以及表单中常用的修饰符,如果以上内容有什么错误还请大家指正,谢谢大家对小编的支持~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容