vue v-model实现自定义样式多选与单选功能


Posted in Javascript onJuly 05, 2018

这两天在玩mpvue,但是下午如果对着文档大眼瞪小眼的话,肯定会睡着的。

想起昨晚的flag,我就想直接用demo上手吧,一举两得

谁想到我好不容易快做完了,v-model在小程序中不起作用!

vue v-model实现自定义样式多选与单选功能 

来不及研究为什么,我先直接在原来项目上赶紧建了一个test页面,先赶紧实现我的这种设想:

使用v-model和原生表单也可以实现这么好看且达到需求的效果。

重要的是不用自己跟在用户屁股后面屁颠屁颠的监听人家到底何时用了点击事件,又把点击事件用在何处了!

 效果图如下,和之前的没什么两样呢!

vue v-model实现自定义样式多选与单选功能vue v-model实现自定义样式多选与单选功能

具体实现我想,vue官网有关于表单输入绑定的讲解和demo,事实上,我只要做到利用他的demo把我的数据和样式调整一下就万事大吉了!

没有什么比简单解决一个功能更让人开心的了!

说干就干,我直接在原来项目代码的基础上动手:

之前的选项处理就一个li孤军奋战,数据渲染、样式切换、包括点击事件都绑定在上边,

ul.qus-list
   li(v-for="(item,index) in state.ExamInfo.QuestionAnswerCode" @click="choosed(index)" v-bind:class="{'li-focus' : chooseNum==index}" ref="liId") {{item.Code}}、{{item.Description}}

简直忙到没朋友啊有没有!光他和ul的长度差距就说明了一切!

现在我们把他要做的事分解一下:

现在他只负责v-for循环数据渲染

ul.qus-list
  li(v-for="(item,index) in state.ExamInfo.QuestionAnswerCode" v-bind:class="{'li-focus' : chooseNum==index}")

内部分配给他两个小弟

input:radio/checkbox和label,这俩人一个负责点击后与数据的绑定,一个负责样式。这么一说大神就明了了,好你可以走了,把沙发腾出来。

这俩人中,Input负责数据绑定,其实也就是利用v-model。具体原理直接看https://cn.vuejs.org/v2/guide/forms.html

input( type="radio" :value="item.Code" :id="'choice1'+index" v-model="picked")

然后时label负责样式。样式也包括用户看到的选项文本的展示:

label(:for="'choice1'+index" class="choice-item") {{item.Code}}、{{item.Description}}

至于他具体怎么负责样式?这个也利用了css的选择器

主要是:checked选择器和+相邻兄弟选择器

/*普通样式*/
   .choice-item{
    display: block;
    margin: .2rem auto 0;
   padding: .3rem .3rem .34rem;
   color: $qusTxt;
   font-size: .34rem;
   text-align: center;
    @include boxStyle(1rem,.12rem,rgba(49,32,114,0.16));
  }
 /*input被选中时,label的样式*/
 input:checked + .choice-item{
    background: $purpleClr;
   color: #FFF;
}

于是就有了这样的样式:

vue v-model实现自定义样式多选与单选功能vue v-model实现自定义样式多选与单选功能

这里可以看出,二者是相互成就的关系:

首先通过html那里,label的for属性和input的id属性关联,使得点击label的时候,input也就被选择上了。
然后是css样式这里,label除了自己正常的样式,还受input被选中状态的影响,当input被选中后(input:checked),作为input在li爸爸内部的唯一兄弟元素(+选择符),label的样式就被重新更新了选中态。

因为选中展示的效果被label做了,那么input也就可以归隐山林,幽香田园生活了。所以直接设置样式不可见即可。

 这也就是我上一篇说的,不会巧妙的利用每一个代码的特性。

而这一篇的实现方式正是还算巧妙的利用了该用的知识点。

也就不再需要li身上绑定的哪个choose事件来监听用户点击了。代码自己给我们做了!

甚至最后连用户选了什么都不用管,直接将v-model绑定的变量传给后端即可。

vue v-model实现自定义样式多选与单选功能vue v-model实现自定义样式多选与单选功能

强大的v-model!

总结

以上所述是小编给大家介绍的vue v-model实现自定义样式多选与单选功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
javascript中substr,substring,slice.splice的区别说明
Nov 25 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
Aug 01 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
Oct 29 Javascript
ExtJS4中使用mixins实现多继承示例
Dec 03 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
最棒的Angular2表格控件
Aug 10 Javascript
简单理解js的冒泡排序
Dec 19 Javascript
bootstrap中的 form表单属性role="form"的作用详解
Jan 20 Javascript
一文了解Vue中的nextTick
May 06 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
基于vue展开收起动画的示例代码
Jul 05 #Javascript
微信小程序实现星级评分和展示
Jul 05 #Javascript
vue-router history模式下的微信分享小结
Jul 05 #Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 #Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 #Javascript
JavaScript控制浏览器全屏显示简单示例
Jul 05 #Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 #jQuery
You might like
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
php实现映射操作实例详解
2019/10/02 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
HTML5附件拖拽上传drop & google.gears实现代码
2011/04/28 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
element-ui点击查看大图的方法示例
2020/12/14 Javascript
python实现简单socket通信的方法
2016/04/19 Python
使用Python读取大文件的方法
2018/02/11 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
python中退出多层循环的方法
2018/11/27 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
在keras里实现自定义上采样层
2020/06/28 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
师范教师毕业鉴定
2014/01/13 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
行政助理岗位职责
2015/02/10 职场文书
入党群众意见范文
2015/06/02 职场文书
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫