-
2020-12-09 17:09:21
uniapp的picker组件 它的值如果是个对象数组的话怎么办
三级联动为例
<view class="uni-list-cell-db"> <!-- range 的必须绑定你的源数据 选择器列表中展示的数据 range-key 绑定的值必须加引号 必须为源数据中的唯一值 value 绑定的值是源数据的下标 --> <picker mode="multiSelector" @columnchange="bindMultiPickerColumnChange" :value="multiIndex" :range="multiArray" :range-key="'region_name'"> <view class="uni-input">{{multiArray[0][multiIndex[0]].region_name}},{{multiArray[1][multiIndex[1]].region_name}},{{multiArray[2][multiIndex[2]].region_name}}</view> </picker> </view>
multiArray // 源数据必须是二维数据 它的长度代表选择器的列数 // 赋值数据时 必须更新视图 $forcUpdate // 剩下的看文档 很清楚
更多相关内容 -
小程序之多列选择器(动态数据,支持2,3,4,5...列)
2018-10-29 11:10:06* 两种写法:for 和 switch,switch为三列选择器写法,for由switch精简拓展过来,可用于多列选择器 * swich写法:如果更改的是第一列数据,第二列数据通过filter筛选(parentId = 第一列选中项id),同时更新第三...代码分两部分,先上wxml
<view class="container"> <form catchsubmit="formSubmit"> <view class="form-card"> <view class="weui-cell weui-cell_input"> <view class="weui-cell__hd"> <view class="weui-label">物种<span>*</span></view> </view> <view class="weui-cell__bd"> <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}"> <view class="weui-input">{{multiArray[0][multiIndex[0]]}}{{multiArray[1][multiIndex[1]]}}{{multiArray[2][multiIndex[2]]}}</view> </picker> </view> </view> </view> </form> </view>
其次是js
Page({ /** * 页面的初始数据 */ data: { objectMultiShow: [], objectMultiArray: [], multiArray: [], multiIndex: [], checkeIndex: [] }, /** * 生命周期函数--监听页面加载 * objectMultiShow--匹配多列选择器渲染数据所对应的json数据(包含id,parentId,name) * multiArray--多列选择器渲染数据 */ onLoad: function (options) { // 初始化 let data = { objectMultiShow: this.data.objectMultiShow, objectMultiArray: this.data.objectMultiArray, multiArray: this.data.multiArray, multiIndex: this.data.multiIndex, checkeIndex: this.data.checkeIndex } data.objectMultiArray = [ [{ id: 0, name: '无脊柱动物' }, { id: 1, name: '脊柱动物' }], [ { id: 0, name: '扁性动物', parentId: 0 }, { id: 1, name: '线形动物', parentId: 0 }, { id: 2, name: '环节动物', parentId: 0 }, { id: 3, name: '软体动物', parentId: 0 }, { id: 4, name: '节肢动物', parentId: 0 }, { id: 5, name: '鱼', parentId: 1 }, { id: 6, name: '两栖动物', parentId: 1 }, { id: 7, name: '爬行动物', parentId: 1 } ], [ { id: 0, name: '猪肉绦虫', parentId: 0 }, { id: 1, name: '吸血虫', parentId: 0 }, { id: 2, name: '蛔虫', parentId: 1 }, { id: 3, name: '蚂蚁', parentId: 2 }, { id: 4, name: '蚂蟥', parentId: 2 }, { id: 5, name: '河蚌', parentId: 3 }, { id: 6, name: '蜗牛', parentId: 3 }, { id: 7, name: '蛞蝓', parentId: 3 }, { id: 8, name: '昆虫', parentId: 4 }, { id: 9, name: '甲壳动物', parentId: 4 }, { id: 10, name: '蛛形动物', parentId: 4 }, { id: 11, name: '多足动物', parentId: 4 }, { id: 3, name: '鲫鱼', parentId: 5 }, { id: 4, name: '带鱼', parentId: 5 }, { id: 3, name: '青蛙', parentId: 6 }, { id: 4, name: '娃娃鱼', parentId: 6 }, { id: 3, name: '蜥蜴', parentId: 7 }, { id: 4, name: '龟', parentId: 7 }, { id: 4, name: '壁虎', parentId: 7 }, ] ] data.objectMultiShow = data.objectMultiArray.map((item, index) => { if (index > 0) { item = item.filter(i => i.parentId === data.objectMultiArray[index - 1][0].id) } return item }) data.multiArray = data.objectMultiShow.map(item => { item = item.map(i => i.name) return item }) console.log(data.multiIndex) // 数据更新 this.setData(data) }, bindMultiPickerChange: function (e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ multiIndex: e.detail.value }) }, bindMultiPickerColumnChange: function (e) { console.log('修改的列为', e.detail.column, ',值为', e.detail.value); // 初始化数据 var data = { objectMultiShow: this.data.objectMultiShow, multiArray: this.data.multiArray, multiIndex: this.data.multiIndex }; // 改变第i列数据之后,后几列选择第0个选项(重置) data.multiIndex[e.detail.column] = e.detail.value; for (let i = e.detail.column; i < data.multiIndex.length - 1; i++) { data.multiIndex[i + 1] = 0 } /** * 改变第i列数据之后,后几列数据更新 * 两种写法:for 和 switch,switch为三列选择器写法,for由switch精简拓展过来,可用于多列选择器 * swich写法:如果更改的是第一列数据,第二列数据通过filter筛选(parentId = 第一列选中项id),同时更新第三列数据 * 如果更改的是第二列数据,更新第三列数据 通过filter筛选(parentId = 第二列选中项id) */ let arry = this.data.objectMultiArray for (let i = e.detail.column; i < data.multiIndex.length - 1; i++) { data.objectMultiShow[i + 1] = arry[i + 1].filter(item => item.parentId === data.objectMultiShow[i][data.multiIndex[i]].id) data.multiArray[i + 1] = data.objectMultiShow[i + 1].map(item => item.name) } /*switch (e.detail.column) { case 0: data.objectMultiShow[1] = arry[1].filter(item => item.parentId === data.objectMultiShow[0][data.multiIndex[0]].id) data.multiArray[1] = data.objectMultiShow[1].map(item => item.name) data.objectMultiShow[2] = arry[2].filter(item => item.parentId === data.objectMultiShow[1][data.multiIndex[1]].id) data.multiArray[2] = data.objectMultiShow[2].map(item => item.name) break; case 1: data.objectMultiShow[2] = arry[2].filter(item => item.parentId === data.objectMultiShow[1][data.multiIndex[1]].id) data.multiArray[2] = data.objectMultiShow[2].map(item => item.name) }*/ // 数据更新 this.setData(data); } })
wxml部分选用的官方组件--picker,根据官方文档mode=multiSelector,表示使用多列选择器。
其他参数容我吐槽下:首先是range--绑定的二维数据,只能是字符串组成的二维数组
,比如[["a","b"], ["c","d"]]
,这样的话多列选择器就是第一列a,b选项,第二列c,d选项。感觉很美。然而事实上这能干啥捏?我们做的多列选择器并不是只是页面展示,要跟后台对接数据的,就这样传字符串合适否?我需要的是带id之类的对象,而wxml页面又不支持双括号绑定数据里写map之类的函数方法。所以,我们后台传过来的数据要改造一下,提取其中的name为绑定数据。第二个就是value,本来以为这个是对应项中的第几个是这样的:a如果对应c,b如果对应d。选择bd应该就是[1, 1],而事实上是[1, 0]。也就是对应页面上展示的第几个对应(bd,页面上第一列有ab两个选项,第二列有且只有一个d)
其他关于bindchange绑定的方法是点击确认按钮触发,bindcolumnchange绑定的方法是滑动多列选择器时候触发,至于bindcancel绑定感觉就是笑话,数据实时改变,取消需要再绑定一个中间值才能达到该有的效果,这里暂时没有做。
js部分我使用了五个数据
-
objectMultiShow: [] 选中带id的Object对象数组
-
objectMultiArray: [] 后台带id,parentId对象数组
-
multiArray: [] 微信小程序组件需求的字符串二维数组
-
multiIndex: [] 微信小程序组件需求的选中对象数组
-
checkeIndex: [] 基于bindcancel的中间值(暂时未做)
为了达到我想到的真正的多列效果,我不惜出卖肉体,跟后台大哥达成的各种屈辱协议,获得了想要的数据格式第一列数组不带parentId,因为没有parent。第二列parentId对应第一列id,第三列parentId对应第二列id,如果还有多,可以依次类推。然后根据需求,依次从中获取所需的其他数据,完成数据初始化。
然后在滑动多列选择器的时候,动态更新后一列的数据,我这里做的处理是更新后一列数据,并默认选择第一个选项。
详细注释写完,发现更多的是配置代码,具体的功能代码反而很少。
个人感觉,小程序不是写代码,而是在配置选项搭建出来的。
-
-
Pycharm 小技巧 —— 列选择模式
2019-09-06 18:47:13PyCharm 的 Column Selection Mode 提供了列选择功能。 使用: Ctrl + Alt + S进入设置 ,然后在输入框输入 column ,就会看到 Column Selection Mode ,可以看到 ,列选择模式的快捷键 列选择模式快捷键 :...PyCharm 的 Column Selection Mode 提供了列选择功能。
使用:
Ctrl + Alt + S 进入设置 ,然后在输入框输入 column ,就会看到 Column Selection Mode ,可以看到 ,列选择模式的快捷键
列选择模式快捷键 :Alt + Shift + Insert
或者:Alt + 鼠标左键
效果如下图:
-
uView的select列选择器
2021-05-21 13:58:36uView的select列选择器多列联动模式的坑! 需要写一个省 市 县的三级联动效果,第一行的第三列是空的,我拿到的第一行的第三列的数据是null 第一张图是我拿到的数据 第二张图是接口数据实现的效果 第三张图是我需要... -
微信小程序自定义多列选择器的使用
2019-06-11 11:40:38微信小程序在自带的表单组件中加入了选择器picker,并给出了常用的时间和省市区三级联动选择器,但日常开发中不可能仅仅使用这些选择器,所以我们在学习时先写一个常见的自定义选择器来看一下。 -
weui 多列选择器实现
2018-06-21 09:18:03weui 多列选择器实现,在单列选择器上多加一列,样式weui中已经实现demo:实现选择时间的两列选择器1.html<a class="weui-cell weui-cell_access font14" href="javascript:;" onclick=&... -
sublime 列选择
2019-07-15 10:26:43列模式 苹果:OS X -鼠标左键+Option -或者鼠标中键 -增加选择:Command,减少选择:Command+Shift 2 Windows: -鼠标右键+Shift -或者鼠标中键 -增加选择:Ctrl,减少选择:Alt ... -
VSCode列选择快捷键
2018-05-29 21:08:48这是一篇十分简短的博客,但是在某些情况下确实是十分有用的。VSCode列选择快捷键:Alt+Shift+左键来一张效果图: -
Pandas 的行选择和列选择
2018-10-16 10:18:35本文的数据来源:... import pandas as pd fandango = pd.read_csv('fandango_score_comparison.csv') 原始的数据如下(截取了一部分) ...行选择 ...Pandas进行行选择一般有三种方法: 连续多... -
pycharm列选择
2019-03-18 10:59:21快捷键Alt+Shift+Insert -
VSCode 中进行列选择
2019-06-02 13:49:151. VSCode 中进行列选择? 最新版本: alt+鼠标点选 alt+shift+鼠标拖动 链接:#link -
uniapp 自定义多列选择器
2019-11-30 10:12:57... {{timeList[0][timesIndex[0]]}}:{{timeList[1][timesIndex[1]]}} data(){ ... console.log('picker发送选择改变,携带值为', e.target.value) this.timesIndex = e.target.value }, } -
Pandas:行选择和列选择
2018-07-24 16:05:06Pandas之容易让人混淆的行选择和列选择 在刚学Pandas时,行选择和列选择非常容易混淆,在这里进行一下讨论和归纳 本文的数据来源:https://github.com/fivethirtyeight/data/tree/master/fandango import pandas... -
PhpStorm列选择列编辑
2018-06-27 16:34:58选中isset,然后按Alt+J,往下,可以选中全部的isset按一下...empty,每一行都在改:还可以批量修改字段名:方法是:选中empty后,向右,移动到要统一添加t_前缀的字段那一列,然后输入t_,所有字段都加上前缀t_了:... -
Sublime Text按列选择方法(Column Selection)
2020-02-15 08:57:39Sublime Text按列选择(Column Selection) 列选择可用于选择文件的矩形区域。 列选择不通过单独的模式操作,而是使用多个选择。 您可以使用添加剂选择来选择多个文本块,或使用减色选择来删除块。 使用... -
idea进入列选择模式
2019-06-10 15:33:00shift + alt + insert 快捷键进入或退出列选择模式 进入列选择模式可以以列坐标选择一列或者多列 转载于:https://www.cnblogs.com/liuxia912/p/10997990.html -
IDEA的列选择模式
2018-08-30 20:47:19shift+alt+insert进入列选择模式,可选择一列或者多列 shift+alt+insert退出列选择模式 -
uniapp 多列选择器 城市选择小demo, 2021-6-15更新
2020-01-03 11:16:58<template> <view> <pickermode="multiSelector" :range="cityList" :value="cityIndex" @change="bindCityChange"> <view> ... -
PyCharm - Column Selection Mode (列选择模式 / 列复制粘贴)
2018-07-22 23:34:39PyCharm - Column Selection Mode (列选择模式 / 列复制粘贴) 1 *.py 文件右键 -> Column Selection Mode -> 鼠标垂直 (列) 选择文本 hotkey: Alt + Shift + Insert 2 列 / 块 复制粘贴 Ctrl + C: Copy ... -
省市区三级联动taro多列选择器
2019-11-05 14:14:33// 滑动选择了区 countyNum = evalue this . setState ( { value : [ provinceNum , cityNum , countyNum ] } , ( ) => { this . cityChange ( ) } ) } } cityChange ( ) { ... -
vsCode 列选择、列选中、选中列、选中多列(转载)
2018-10-24 17:47:00VSCode列选择快捷键 来源 https://blog.csdn.net/Luyanc/article/details/80502069 VSCode列选择快捷键:Alt+Shift+左键 来一张效果图: 转载于:... -
小程序 picker 多列选择器 数据动态获取
2018-04-08 15:23:07转载自:https://www.cnblogs.com/inzaghihao/p/7844844.html小程序 picker 多列选择器 数据动态获取 需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数。... -
idea列选择快捷键,批量修改多行内容
2020-08-09 23:33:19idea列选择快捷键,批量修改多行内容 方式1:按住shift + alt,鼠标左键选择多个位置或区域(可以多次选择) -
微信小程序之picker组件(多列选择器)
2018-12-25 16:57:25原生的省市区(mode=region)选择器只能获取汉字,不能定制每个省市的id,另外区选择器实际项目中没有使用到,思考下后选择手动修改多列选择器(mode=multiSelector)实现功能。 实现原理:multiArray是二维数组,... -
(UIPickerView)选择器的使用--相互依赖的多列选择器
2016-01-11 14:26:07运用下面该方法可以任意定制自己的的选择器视图 -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { view = [... -
EditPlus,UltraEdit等编辑器列选择的方法
2015-04-30 12:00:19在使用富文本编辑器的时候,通常模式是行选择状态,由于今天想使用EditPlus列选择状态, 于是通过在网上收集的资料,总结出相关富文本编辑器的列选择的方法。 -
Mac环境下sublime实现列选择或编辑的方法
2017-02-13 14:56:002019独角兽企业重金招聘Python工程师标准>>> ...Command + 鼠标中键(有些机子可能是左键): 可以手动选择同时要编辑的多处文本 转载于:https://my.oschina.net/u/2391658/blog/837594 -
安卓开发——Android studio怎么使用列选择模式
2016-04-01 23:26:11那么只想选择列中的代码(如下图),那么该如何进行选择呢? 点击edit->column selection mode,如下图: 点击后,选中模式就由横向选择变为列向选择,如果想再改为横向选择,再次点击edit->column ... -
PyCharm使用技巧:Column Selection Mode(列选择模式)
2017-07-02 19:46:52PyCharm的Column Selection Mode提供了列选择功能。