vant picker+popup 自定义三级联动案例


Posted in Javascript onNovember 04, 2020

picker选择器的数据由columns属性控制,columns中有几个元素就代表该选择器有多少级,通过change方法来给对应列赋值。

columns = [{
    values: column1, // 对应列的值
    defaultIndex: 0, // 默认选中项索引
    className: 'class1' // 对应列的类名 
  },
  {
    values: [],
    defaultIndex: 0,
    className: 'class2'
  },
  {
    values: [],
    defaultIndex: 0,
    className: 'class3'
  }
];

demo

<template>
<div class="form">
  <van-row type="flex" justify="center" align="center" style="padding-top:10px">
    <van-col span="5" class="text">自定义三级联动</van-col>
    <van-col span="19">
      <van-field v-model="student" placeholder="请选择" @click="stuShow = true" :readonly="true" />
    </van-col>
  </van-row>
  <!-- 底部弹出 -->
  <van-popup v-model="stuShow" position="bottom" :style="{ height: '40%' }">
    <van-picker :columns="stuLoad" @confirm="stuConfirm" @change="stuChange" @cancel="stuShow = false" show-toolbar />
  </van-popup>
</div>
</template>

<script>
export default {
  name: "Form",
  data() {
    return {
      student: '',
      stuShow: false,
      stuLoad: [],
      stuColumn1: [],
      stuColumn2: [],
      stuColumn3: []
    };
  },
  created() {
    this.makeData(); // 页面加载时给选择框赋初始值
  },
  methods: {
    makeData() { // 模拟数据,生产环境用axios获取数据
      let column1 = [{
        'kid': 0,
        'text': '请选择'
      }, {
        'kid': 1,
        'text': '一年级'
      }, {
        'kid': 2,
        'text': '二年级'
      }];
      let column2 = {
        '1': [{
          'kid': 1,
          'text': '一组'
        }, {
          'kid': 2,
          'text': '二组'
        }, {
          'kid': 3,
          'text': '三组'
        }],
        '2': [{
          'kid': 4,
          'text': '四组'
        }, {
          'kid': 5,
          'text': '五组'
        }]
      }
      let column3 = {
        '1': [{
          'kid': 1,
          'text': '小明'
        }, {
          'kid': 2,
          'text': '小红'
        }, {
          'kid': 3,
          'text': '小刚'
        }],
        '2': [{
          'kid': 4,
          'text': 'Amy'
        }, {
          'kid': 5,
          'text': 'Sam'
        }],
        '3': [{
          'kid': 4,
          'text': 'Sion'
        }, {
          'kid': 5,
          'text': 'Juno'
        }],
        '4': [{
          'kid': 6,
          'text': 'Lucy'
        }, {
          'kid': 7,
          'text': 'Tom'
        }],
        '5': [{
          'kid': 6,
          'text': 'Iwan'
        }]
      }
      let columns = [];
      columns = [{
          values: column1,
          defaultIndex: 0 //默认选中项索引
        },
        {
          values: [],
          defaultIndex: 0
        },
        {
          values: [],
          defaultIndex: 0
        }
      ];
      this.stuColumn2 = column2;
      this.stuColumn3 = column3;
      this.stuLoad = columns;
    },
    stuConfirm(value, index) { // 下方弹出层点击确认时触发
      // value为各列选中值
      // index为各列选中的索引
      if (index.indexOf(0) > -1) {
        alert('请选择');
      } else {
        let content = value[0]['text'] + ' / ' + value[1]['text'] + ' / ' + value[2]['text'];
        this.student = content;
        this.stuShow = false;
      }
    },
    stuChange(picker, value, index) { // 选择器改变时触发
      // Picker 实例
      // value为当前选中值
      // index为当前列对应的索引,第一列index为0,第二列index为1,依次列推
      if (index == 0) { // 改变第一列的值
        let i = value[0]['kid'];
        let item = this.stuColumn2[i] ? this.stuColumn2[i] : [];
        if (item && item[0]['text'] != '请选择') {
          item.unshift({
            'kid': 0,
            'text': '请选择'
          })
        }
        picker.setColumnValues(1, item); // 给对应的列赋值,第一个参数为列的index值,第二个参数为列的values
      } else if (index == 1) {
        let i = value[1]['kid'];
        let item = this.stuColumn3[i] ? this.stuColumn3[i] : [];
        if (item.length != 0 && item[0]['text'] != '请选择') {
          item.unshift({
            'kid': 0,
            'text': '请选择'
          })
        }
        picker.setColumnValues(2, item);
      }
    }
  }
};
</script>

<style scoped>
.text {
  text-align: right;
}
</style>

补充知识:vue vant-picker选择器的使用,及数据结构的写法

vant-picker组件columns属性接收的是一个数组,如官方例子中:

vant picker+popup 自定义三级联动案例

它的数组是子项是一个简单是字符,但通常我们真实的数据子项都是对象,如:

colums:[ {name:'张三',age:18},{name:'李四',age:28}]

那么像这样的数组该怎么显示呢, vant-picker的value-key属性就是解决这个问题的,如我要使用上面的数组,那么vant-picker

就是这样

vant picker+popup 自定义三级联动案例

另外,如果数组中的子项含有键名为'text',那么value-key也可以不用设置,组件会默认取这个键名,如colums:[ {text:'张三',age:18},{text:'李四',age:28}]

以上这篇vant picker+popup 自定义三级联动案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
Sep 04 Javascript
javascript for循环设法提高性能
Feb 24 Javascript
js null undefined 空区别说明
Jun 13 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
Jun 19 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
Sep 09 Javascript
jQuery中attr()方法用法实例
Jan 05 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
Jun 14 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 Javascript
微信小程序实现上传照片代码实例解析
Aug 04 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 #Javascript
vantUI 获得piker选中值的自定义ID操作
Nov 04 #Javascript
浅谈vant组件Picker 选择器选单选问题
Nov 04 #Javascript
vue项目打包后请求地址错误/打包后跨域操作
Nov 04 #Javascript
原生JavaScript实现贪吃蛇游戏
Nov 04 #Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 #Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
Nov 03 #Javascript
You might like
在IIS上安装PHP4.0正式版
2006/10/09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP 编程安全性小结
2010/01/08 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
javascript数组随机排序实例分析
2015/07/22 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
深入理解vue Render函数
2017/07/19 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
使用Python的PIL模块来进行图片对比
2016/02/18 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
关于梦想的演讲稿
2014/05/05 职场文书
干部考察材料范文
2014/12/24 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL