- 408
- 2
想使用vant的picker组件绑定多级联动的
我自己写了一下,只不过这种不太通用,就是改变的时候没有让他一级一级往下获取,这个你们可以自行解决
`<el-button type="primary" @click="show=true">弹窗</el-button>
<van-popup v-model="show" position="bottom" :overlay="true"> <van-picker show-toolbar title="标题" :columns="columns" @cancel="onCancel" @confirm="onConfirm" @change="onChange"/> </van-popup>`
`<script>
var pickerData=[{
id:1,
name:'A区',
child:[{
id:11,
name:"1-11列",
},{
id:12,
name:"1-12列",
}]
},{
id:2,
name:'B区',
child:[{
id:21,
name:"2-21列",
},{
id:24,
name:"2-24列",
}]
}] var vm = new Vue({
el: '#app',
data(){
return {
show:false, address:[],//当前选中的盘点位置
columns:[{
values: [],
className: 'column1'
},{
values: [],
className: 'column2',
defaultIndex: 0
}],
}
},
created(){ for(var i in pickerData){ var obj = {
text:pickerData[i].name,
id:pickerData[i].id
}
this.columns[0].values.push(obj)
} for(var i in pickerData[0].child){ var obj = {
text:pickerData[0].child[i].name,
id:pickerData[0].child[i].id
}
this.columns[1].values.push(obj)
}
},
methods:{
onCancel(){
this.show = false
},
onConfirm(picker,value,index){
console.log('onConfirm',picker,value,index)
this.address=[] for(var i in picker){
this.address.push(picker[i].id)
}
this.show = false
},
onChange(picker,value,index){
console.log('onChange',picker,value,index) if(index == 0){ var arr = [] for(var i in pickerData){ if(value[0].id == pickerData[i].id){ for(var x in pickerData[i].child){ var obj = {
text:pickerData[i].child[x].name,
id:pickerData[i].child[x].id
}
arr.push(obj)
}
}
}
picker.setColumnValues(1,arr)
}else if(index == 1){
}
}
}
})</script>`
- 共 2 条
- 全部回答
-
苏格拉没有底 普通会员 2020-01-13 13:311楼
我自己写了一下,只不过这种不太通用,就是改变的时候没有让他一级一级往下获取,这个你们可以自行解决
`<el-button type="primary" @click="show=true">弹窗</el-button><van-popup v-model="show" position="bottom" :overlay="true"> <van-picker show-toolbar title="标题" :columns="columns" @cancel="onCancel" @confirm="onConfirm" @change="onChange"/> </van-popup>`
`<script>
var pickerData=[{ id:1, name:'A区', child:[{ id:11, name:"1-11列", },{ id:12, name:"1-12列", }] },{ id:2, name:'B区', child:[{ id:21, name:"2-21列", },{ id:24, name:"2-24列", }] }] var vm = new Vue({ el: '#app', data(){ return { show:false, address:[],//当前选中的盘点位置 columns:[{ values: [], className: 'column1' },{ values: [], className: 'column2', defaultIndex: 0 }], } }, created(){ for(var i in pickerData){ var obj = { text:pickerData[i].name, id:pickerData[i].id } this.columns[0].values.push(obj) } for(var i in pickerData[0].child){ var obj = { text:pickerData[0].child[i].name, id:pickerData[0].child[i].id } this.columns[1].values.push(obj) } }, methods:{ onCancel(){ this.show = false }, onConfirm(picker,value,index){ console.log('onConfirm',picker,value,index) this.address=[] for(var i in picker){ this.address.push(picker[i].id) } this.show = false }, onChange(picker,value,index){ console.log('onChange',picker,value,index) if(index == 0){ var arr = [] for(var i in pickerData){ if(value[0].id == pickerData[i].id){ for(var x in pickerData[i].child){ var obj = { text:pickerData[i].child[x].name, id:pickerData[i].child[x].id } arr.push(obj) } } } picker.setColumnValues(1,arr) }else if(index == 1){ } } } })</script>`
-
冰蓝无敌 超级管理员 2020-01-13 13:332楼
最近处理了个二级分类的,处理成官方数据形式来写。
:columns="columns"
columns写到计算属性computed里,computedreturn一个过滤的数据和官方提供的数据格式一致即可。onChange(picker, values){ //选择项目操作 picker.setColumnValues(1, this.arr[values[0]]); } onConfirm(value,index){ //确认选择操作 //value:选择的项目数组,index:选择的项目下标数组,可以利用下标数组操作你自己的对象}
-
我是阿正啊 普通会员 3楼
vant 的picker组件提供了多种联动功能,可以通过以下方式绑定多级联动:
- 多级联动选项:在picker中,可以设置多级联动选项,每个选项对应不同的类别或者属性。以下是一个简单的示例:
html <van-picker v-model="selectedCategory" multiple type="dropdown" :options="categoryOptions"> <van-menu-item v-for="(item, index) in selectedCategory" :key="index" :label="item.label" :icon="item.icon" @click="handleItemClick(index)"> {{ item.label }} </van-menu-item> </van-picker>在这个示例中,
categoryOptions是多个option的数组,每个option的label属性为option的名称,icon属性为option的图标,@click事件处理函数handleItemClick接受index参数,表示当前选中的option的索引,通过item.label获取option的名称,通过item.icon获取option的图标。- 多级联动选择器:在picker的
options选项中,可以设置多级联动的选项。例如,可以设置第一个层级的选项为category-1,第二个层级的选项为category-2,以此类推。以下是一个示例:
html <van-picker v-model="selectedCategory" multiple type="dropdown" :options="categoryOptions" :multiple-level="true"> <van-menu-item v-for="(item, index) in selectedCategory" :key="index" :label="item.label" :icon="item.icon" @click="handleItemClick(index)"> {{ item.label }} </van-menu-item> </van-picker>在这个示例中,
categoryOptions是多级联动选项的数组,multiple-level参数设置为true,表示默认为多级联动模式,当多个options被选中时,这些options会被分别绑定到多个category-后面,例如category-1,category-2等。- 多级联动插槽:在picker的
options选项中,可以设置多级联动的插槽。例如,可以设置第一个层级的插槽为category-1,第二个层级的插槽为category-2,以此类推。以下是一个示例:
html <van-picker v-model="selectedCategory" multiple type="dropdown" :options="categoryOptions" :multiple-level="true"> <van-menu-item v-for="(item, index) in selectedCategory" :key="index" :label="item.label" :icon="item.icon" @click="handleItemClick(index)"> <van-swatch slot="category-{{ index }}"> <template slot="icon">{{ item.icon }}</template> <template slot="label">{{ item.label }}</template> </van-swatch> </van-menu-item> </van-picker>在这个示例中,
categoryOptions是多级联动选项的数组,multiple-level参数设置为true,表示默认为多级联动模式,当多个options被选中时,这些options会被分别绑定到多个category-后面,每个category-后面有一个<van-swatch>插槽,<van-swatch>中包含两个模板:一个是<template slot="icon">,用于绑定item的图标,另一个是<template slot="label">,用于绑定item的名称。每个item的icon和label会被分别绑定到这两个模板中,形成多级联动的效果。通过上述方式,你可以在vant的picker组件中绑定多级联动,实现不同层级的选项之间的联动效果。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

