uniapp用picker实现自定义三级联动(children)

数据大概得结构:

html:

<view class="invite">
				<u-cell title="点击选则" isLink :value="value" @click="shows=true"></u-cell>
				<u-picker :show="shows" ref="uPicker" :columns="columns" @confirm="confirm" @cancel="shows=false"
					@change="changeHandler"></u-picker>
			</view>

js:

shows: false,
				columns: [],
				origiData: [],
				value: "",
async branchAppov() {
				const res = await branchAppov()
				this.origiData = res.data
				this.handelData();
			},
//初始化开始数据
			handelData() {
				// console.log(this.origiData.value))
				let sheng = [];
				let shi = [];
				let qu = [];
				this.origiData.forEach(item => {
					sheng.push(item.name);
					// 设置出初始化的数据
					if (item.name == '董事会') {
						item.children.forEach(child => {
							shi.push(child.name);

							if (child.name == '项目部') {
								child.children.forEach(el => {
									qu.push(el.name);
								});
							}
						});
					}
				});
				this.columns.push(
					JSON.parse(JSON.stringify(sheng)),
					JSON.parse(JSON.stringify(shi)),
					JSON.parse(JSON.stringify(qu))
				);
			},
			changeHandler(e) {
				console.log(e, 333);
				const {
					columnIndex,
					value,
					values, // values为当前变化列的数组内容
					index,
					// 微信小程序无法将picker实例传出来,只能通过ref操作
					picker = this.$refs.uPicker
				} = e;
				// 当第一列值发生变化时,变化第二列(后一列)对应的选项
				if (columnIndex == 0) {
					// console.log(value)
					// picker为选择器this实例,变化第二列对应的选项
					this.origiData.forEach(item => {
						if (value[0] == item.name) {
							let shi = [];
							let flag = item.children[0];
							if(flag == undefined){
								picker.setColumnValues(1, shi);
								picker.setColumnValues(2, []);
								return
							}
							item.children.forEach((val, ol) => {
								shi.push(val.name);
								if (shi[0] == flag.name) { //设置默认开关(选择省份后设置默认城市)
									flag = '';
									let qu = [];
									val.children.forEach(vol => {
										qu.push(vol.name);
									});
									picker.setColumnValues(2, qu);
								}
							});
							picker.setColumnValues(1, shi);
						}
					});
				}
				//当第二列变化时,第三列对应变化
				if (columnIndex == 1) {
					this.origiData.forEach(item => {
						if (value[0] == item.name) {
							let shi = [];
							item.children.forEach((val, ol) => {
								shi.push(val.name);
								if (value[1] == val.name) {
									let qu = [];
									val.children.forEach(vol => {
										qu.push(vol.name);
									});
									picker.setColumnValues(2, qu);
								}
							});
						}
					});
				}
			},
			// 确认选中的数据
			confirm(e) {
				console.log('confirm', JSON.stringify(e));
				this.value = e.namae[0] + e.namae[1] + e.namae[2]
				this.shows = false;
			},

相关推荐

  1. uniapp picker组件实现二级联动

    2023-12-14 00:58:01       16 阅读
  2. 基于uniapp 组件uniform 得定义picker 选择器

    2023-12-14 00:58:01       27 阅读
  3. EasyExcel实现三级联动

    2023-12-14 00:58:01       32 阅读
  4. uniapp实现定义底部tab栏

    2023-12-14 00:58:01       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-14 00:58:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-14 00:58:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-14 00:58:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-14 00:58:01       20 阅读

热门阅读

  1. 第22关 深入解析K8s中的RBAC角色访问控制策略

    2023-12-14 00:58:01       38 阅读
  2. fastapi 实践

    2023-12-14 00:58:01       40 阅读
  3. React系列-useEffect的使用

    2023-12-14 00:58:01       47 阅读
  4. 基础数据导入

    2023-12-14 00:58:01       29 阅读
  5. 【8.0.34-0 ubuntu 安装Mysql 后无法链接是什么情况】

    2023-12-14 00:58:01       38 阅读
  6. Deepsort目标跟踪算法

    2023-12-14 00:58:01       37 阅读
  7. charCodeAt() 方法

    2023-12-14 00:58:01       40 阅读
  8. 返回值的作用,用法

    2023-12-14 00:58:01       37 阅读
  9. springboot 获取路径

    2023-12-14 00:58:01       36 阅读
  10. 55.跳跃游戏

    2023-12-14 00:58:01       33 阅读