之前做了一个单页面的单选和多选,这里我整理了一下,封装成组件,能够同时支持单选和多选。

我这里的代码是在vue脚手架(vue-cli)上开发完成的,搭建方法这里就不细说了。

这个组件的名字呢命为 option.vue

option.vue

HTML:

<div class="chooser"><ul class="chooser-list"><li :style="cssStyle"v-for="(item, index) in options" :key="index"@click="optionsClick(item)":class="{active: checkActive(item)}">{{ item }}</li></ul>
</div>

 CSS:

ul, li {margin: 0;padding:0;list-style: none;
}
.chooser {position: relative;display: inline-block;
}
.chooser-list li{margin: 5px;width: 80px;height: 40px;line-height: 40px;border-radius: 7px;display: inline-block;border: 1px solid #9C9C9C;color: #9C9C9C;text-align: center;background: #fff;
}
.chooser-list li.active {border-color: #097fe0;color: #097fe0;background: #fff;
}

  JS:

export default {name: 'options',data () {return {currValArr: []}},props: {options: Array, //传入的数组isMultiply: { //是否是多选。默认为false:单选;true:多选type: Boolean,default: false},cssStyle: Object //可以自定义单选或者多选的样式},methods: {optionsClick (item) {    },    checkActive (item) {    }    }}

到这里为止呢,我们需要把两个方法里的逻辑补齐。

optionClick(),这个方法要实现点击然后选中,传的参数是当前数组值,在里面我们需要判断是单选还是多选

optionsClick (item) {if (this.isMultiply === false) { //单选this.$set(this.currValArr, 0, item) // 将该值设为当前数组的第一项} else { //多选if (this.currValArr.indexOf(item) === -1) {// 当前数组中没有该值则push到数组this.currValArr.push(item)} else { //当前数组中有该值,找到该值下标并删除this.currValArr.splice(this.currValArr.indexOf(item), 1)}}
}

那么在checkActive方法中,需要得到一个布尔值,来确定是否添加类名active

checkActive (item) {if (this.isMultiply === false) {this.currValArr.length = 1}return this.currValArr.indexOf(item) !== -1
}

 App.vue

<template><div id="app"><h3>单选</h3><options :options="selections"></options><h3>多选</h3><options :options="selections1" :isMultiply=true></options></div>
</template>
<script>
import Options from './components/options'; //注意这里的路径
export default {name: 'App',components: {Options},data () {return {selections: ['赵雅芝','刘雪华','俞飞鸿','林青霞','陈美琪'],selections1: ['慕容冲','潘安','宋玉','卫玠','兰陵王']}},
}
</script>

 效果图如下:

虽然现在看上去基本OK了,单选多选都能实现,但我们还希望他能实现双向绑定,现在视图可以更新数据,我们接下来完成数据更新视图

App.vue 中,

template:
<options :options="selections" v-model="value"></options><div>当前选中值:{{value}}</div>
<options :options="selections1" v-model="value1" :isMultiply=true></options><div>当前选中值:{{value1}}</div>

  js:

data () {return {// 代码省略value: ['赵雅芝'],value1: ['卫玠','潘安',]}
}

 option.vue中

export default {name: 'options',model: {prop: 'currValArr',event: 'input'},props: {currValArr: Array,options: Array,isMultiply: {type: Boolean,default: false},cssStyle: Object},methods: {// ...}
}

 这样,就实现了双向绑定了。使用了自定义组件的v-model,利用model选项,来指定prop和event。不了解自定义组件model的可以去官网看,上面讲解的很详细。

 

转载于:https://www.cnblogs.com/ddkei/p/9802907.html

vue组件—支持单选或者多选相关推荐

  1. android 流失布局,GitHub - hongyangAndroid/FlowLayout: [不再维护]Android流式布局,支持单选、多选等,适合用于产品标签等。...

    FlowLayout Android流式布局,支持单选.多选等,适合用于产品标签等. ##特色 以setAdapter形式注入数据 直接设置selector为background即可完成标签选则的切换 ...

  2. vue 答题(单选,多选,判断)

    这里是后台处理得计分,前台这是渲染题目,以及回显用户答得题 答题 后台数据格式 <ul><li v-for="(i, index1) in arrlist.pqList&q ...

  3. swift 从手机选照片_【纯代码】Swift相册照片选择-支持单选或多选

    // //NAPublishAssetViewController.swift //Created by on 2019/3/23.//Copyright © . All rights reserve ...

  4. Vue 组件封装之 Questionnaire 问卷调查

    Vue 组件封装之 Questionnaire 问卷调查 前言 一.Questionnaire 组件 二.使用案例 三.API 使用指南 四.源代码 前言 问卷调查表也是目前前端比较常见的开发项目,目 ...

  5. uni-app - 日历选择器组件(支持日期 “范围选择“ 多选 / 支持单选日期 / 自定义默认选中时间 / 弹框式 / 支持农历 )完美兼容 H5 APP 小程序,最好用的教程完整源代码插件!

    前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,本文代码干净整洁注释详细. 本文提供 弹框式日历选择器组件,支持单选.范围选择日期,全端兼容无BUG! 您只需复制粘贴,保证几 ...

  6. vue 日期前面加0_vue日期组件 支持vue1.0和2.0

    vue-datetime 使用vue编写的时间组件,小巧实用,支持vue1.0,vue2.0 v1.0 功能: 1.支持同时展开多个日期选择框 2.支持单击选中和取消,可配置单选和多选 3.支持双击启 ...

  7. Vue+Vant制作单选全选全不选以及删除按钮van-checkbox

    在官网上看到vant组件特别好用,就尝试使用checkbox制作单选全选,由于是下午头脑不清楚所以没想通思路,导致了一部分的错误,经过我的老大指点,才想通如此简单的思路,就是都亮和都不亮的区别. 全选 ...

  8. 京东Vue组件库NutUI 2.0发布:将支持跨平台!

    NutUI 是一套来自京东用户体验设计部(JDC)前端开发部的移动端 Vue 组件库,NutUI 1.0 版本于 2018 年发布.据不完全统计,目前在京东至少有30多个 web 项目正在使用 Nut ...

  9. vue 带全选和多选的表格怎么写_vue实现下拉列表多选全选以及模糊查询的vue组件...

    vue实现下拉列表多选全选以及模糊查询的vue组件 发布时间:2018-09-12 17:41, 浏览次数:3776 , 标签: vue <>前端,有时有这样的需求,需要一个下拉列表,还要 ...

最新文章

  1. 素数c语言k1k2,1.编写一程序,输入两个整数k1,k2,(k1k2)。求出k1,k2间的素数...
  2. 蒙特卡罗方法验证凯利公式
  3. 公开课视频-《第03章 部署-IT基础架构》-大企业云桌面部署实战-在线培训-视频(奉献)...
  4. OVS中arp响应的流表的实现
  5. CompletableFuture介绍
  6. mysql ddl dml 导出_MySQL:DDL和DML语句,弄明白了吗?
  7. 安卓APP_ 控件(7)——Toolbar栏目样式
  8. Android之最简单的遍历某个目录下的所有文件(递归)
  9. LeNet-5——CNN经典网络模型详解(pytorch实现)
  10. python 异常 模块 包
  11. [转载] 使用Python处理Excel文件
  12. pandas.DataFrame.rank
  13. 《微店赚钱一册通 ——开店+营销+推广 实战全攻略》一一1.5 微店有哪些优势...
  14. 易筋SpringBoot 2.1 | 第三十六篇:Spring Boot RestTemplate超时配置示例
  15. android adb调试驱动,安卓手机上的调试工具adb驱动要怎么安装 手机安装adb驱动怎么做 - 驱动管家...
  16. 基于Python的Web开发
  17. No.11软件工程的过程管理
  18. npm安装opencv4nodejs(Windows)
  19. 微软掷豪金投资海底数据电缆
  20. 3、一层、二层、交换机原理、Cisco软件及命令

热门文章

  1. 推荐!国外程序员整理的 PHP 资源大全
  2. docker 容器防火墙设置
  3. 文章编辑系统的设计与实现
  4. HDU 3363 冰糖葫芦
  5. vue v-else中使用document.getElementById获取不到值的问题
  6. 分享一个Vue前端代码质量检查方案
  7. 尚硅谷ajax学习记录
  8. Lyndon的量化修炼之路——随机指标(KDJ)优化策略(一)
  9. What is a Lightweight Methodology? 什么是轻量级方法?(英汉对照)
  10. linux驱动系列学习之阻塞与非阻塞IO(六)