当前位置:   article > 正文

uniapp 异步加载级联选择器(Cascader,data-picke)

uniapp 异步加载级联选择器(Cascader,data-picke)

 

目录

Props

事件方法

inputChange事件回调参数说明:

completeChange事件回调参数说明:

temList 属性Object参数说明

defaultItemList 属性Object参数说明

在template中使用


由于uniapp uni-ui的data-picke 不支持异步作者自己写了一个 插件市场下载使用

插件市场地址级联数据选择 data-picker 自定义多级选择 多级联动选择、 - DCloud 插件市场

 

Props

属性名类型说明默认值
readonlyBoolean只读 |false
borderBoolean边框 | true
clearIconBoolean清除按钮 | true
placeholderString默认提示 |请选择
popupTitleString弹窗标题 |请选择
itemListArray级联数据, 如果下一级是请求返回,则为第一级数据,否则为所有数据[ ]
defaultItemListArray初始化默认选中数据,当一次性传入所有数据时,默认值可为字符串数组,如:['安徽省','阜阳市','颍上县'][ ]
defaultKeyV1.7.2+ String默认值字段key,可传值:text,value,仅当一次性传入所有数据时有效text
headerLineBoolean是否显示header底部细线true
headerBgColorStringheader背景颜色#FFFFFF
tabsHeightString顶部标签栏高度88rpx
textString默认显示文字请选择
sizeNumbertabs 文字大小28
colorStringtabs 文字颜色#555
activeColorString选中颜色#5677fc
boldBoolean选中后文字加粗true
showLineBoolean选中后是否显示底部线条true
lineColorString线条颜色#5677fc
checkMarkSizeNumbericon 大小15
checkMarkColorStringicon 颜色#5677fc
imgWidthStringitem 图片宽度40rpx
imgHeightStringitem 图片高度40rpx
radiusString图片圆角50%
textColorStringitem text颜色#333
textActiveColorStringitem text选中后颜色#333
textBoldBoolean选中后字体是否加粗true
textSizeNumberitem text字体大小28
nowrapBooleantext 是否不换行false
subTextColorStringitem subText颜色#999
subTextSizeNumberitem subText字体大小24
paddingStringitem padding20rpx 30rpx
firstItemTopString占位高度,第一条数据距离顶部距离20rpx
heightStringswiper 高度300px
backgroundColorStringitem swiper 内容部分背景颜色#FFFFFF
requestBoolean子级数据是否请求返回(默认false,一次性返回所有数据)false
receiveDataArray子级数据(当有改变时,默认为当前选中项新增子级数据,request为true时生效)[ ]
reset[Number, String]改变reset值则重置所有数据

事件方法

属性类型说明返回值
popupopenedEvents弹框打开时触发
popupclosedEvents弹框关闭时触发
completeChangeEvents选择器中item项点击时触发
inputChangeEvents选择结果数据

inputChange事件回调参数说明:

  • layer 当前所属层级
  • subIndex 当前层级点击项索引值
  • subItem项 当前层级点击项所有数据,由父组件传入的数据

completeChange事件回调参数说明:

  • result 当前选择的结果
  • text 所有层级选择的text值拼接数据,如:安徽省合肥市庐阳区
  • value 最后一级点击项的value值
  • subText 最后一级点击项的text值
  • src 最后一级点击项的src值

temList 属性Object参数说明

属性 receiveData 数据格式与 itemList中子集数据一致,数据为约定格式,尽量保持一致。

  1. [{
  2. src: "", //图标地址
  3. text: "",//主文本
  4. subText: "",//副文本
  5. value: 0, //value
  6. children:[{
  7. text: "",//主文本
  8. subText: "",//副文本
  9. value: 0,//value
  10. children:[] //子级数据 如果数据长度为0则表示没有下一级数据了
  11. }] //子级数据
  12. }]

defaultItemList 属性Object参数说明

数据为约定格式,尽量保持一致,当一次性传入所有数据时,默认值可为字符串数组。

  1. [{
  2. text: "", //选中的text
  3. subText: '', //选中的subText
  4. value: '', //选中的value
  5. src: '', //选中的src,没有则传空或不传
  6. index: 0, //选中数据在当前layer索引
  7. list: [{
  8. src: "",//图标地址
  9. text: "", //主文本
  10. subText: "",//副文本
  11. value: 101 //value
  12. }] //当前layer下所有数据集合
  13. }]

在template中使用

  1. <template>
  2. <view>
  3. <jia-cascader request :itemList="itemList" :receiveData="receiveData" :defaultItemList="defaultItemList" @completeChange="complete" @inputChange="change"></jia-cascader>
  4. </view>
  5. </template>
  6. <script>
  7. // data 数据 及 方法
  8. export default {
  9. data() {
  10. return {
  11. itemList: [],
  12. receiveData: [],
  13. defaultItemList: [
  14. {
  15. src: '',
  16. text: '高一(3)班',
  17. subText: '30人',
  18. value: 102,
  19. index: 1, //选中数据在当前layer索引
  20. list: [
  21. {
  22. src: '',
  23. text: '高一(1)班',
  24. subText: '30人',
  25. value: 101
  26. },
  27. {
  28. src: '',
  29. text: '高一(2)班',
  30. subText: '30人',
  31. value: 102
  32. },
  33. {
  34. src: '',
  35. text: '高一(3)班',
  36. subText: '30人',
  37. value: 103
  38. },
  39. {
  40. src: '',
  41. text: '高一(1)班',
  42. subText: '30人',
  43. value: 101
  44. },
  45. {
  46. src: '',
  47. text: '高一(2)班',
  48. subText: '30人',
  49. value: 102
  50. },
  51. {
  52. src: '',
  53. text: '高一(1)班',
  54. subText: '30人',
  55. value: 101
  56. },
  57. {
  58. src: '',
  59. text: '高一(2)班',
  60. subText: '30人',
  61. value: 102
  62. },
  63. {
  64. src: '',
  65. text: '高一(1)班',
  66. subText: '30人',
  67. value: 101
  68. },
  69. {
  70. src: '',
  71. text: '高一(2)班',
  72. subText: '30人',
  73. value: 102
  74. },
  75. {
  76. src: '',
  77. text: '高一(1)班',
  78. subText: '30人',
  79. value: 101
  80. },
  81. {
  82. src: '',
  83. text: '高一(2)班',
  84. subText: '30人',
  85. value: 102
  86. },
  87. {
  88. src: '',
  89. text: '高一(1)班',
  90. subText: '30人',
  91. value: 101
  92. },
  93. {
  94. src: '',
  95. text: '高一(2)班',
  96. subText: '30人',
  97. value: 102
  98. },
  99. {
  100. src: '',
  101. text: '高一(1)班',
  102. subText: '30人',
  103. value: 101
  104. },
  105. {
  106. src: '',
  107. text: '高一(2)班',
  108. subText: '30人',
  109. value: 102
  110. },
  111. {
  112. src: '',
  113. text: '高一(1)班',
  114. subText: '30人',
  115. value: 101
  116. }
  117. ] //当前layer下所有数据集合
  118. },
  119. {
  120. text: '周小小', //选中的text
  121. subText: '女', //选中的subText
  122. value: 11103, //选中的value
  123. src: '', //选中的src,没有则传空或不传
  124. index: 2, //选中数据在当前layer索引
  125. list: [
  126. {
  127. text: '张三',
  128. subText: '男',
  129. value: 11101
  130. },
  131. {
  132. text: '王五',
  133. subText: '男',
  134. value: 11102
  135. },
  136. {
  137. text: '周小小',
  138. subText: '女',
  139. value: 11103
  140. },
  141. {
  142. text: '周小小',
  143. subText: '女',
  144. value: 11103
  145. },
  146. {
  147. text: '周小小',
  148. subText: '女',
  149. value: 11103
  150. }
  151. ] //当前layer下所有数据集合
  152. }
  153. ]
  154. };
  155. },
  156. onLoad() {
  157. this.itemList = [
  158. {
  159. src: ' ',
  160. text: '高一(1)班',
  161. subText: '30人',
  162. value: 101
  163. },
  164. {
  165. src: ' ',
  166. text: '高一(2)班',
  167. subText: '30人',
  168. value: 102
  169. },
  170. {
  171. src: ' ',
  172. text: '高一(3)班',
  173. subText: '30人',
  174. value: 103
  175. },
  176. {
  177. src: ' ',
  178. text: '高一(4)班',
  179. subText: '28人',
  180. value: 104
  181. },
  182. {
  183. src: ' ',
  184. text: '高一(5)班',
  185. subText: '28人',
  186. value: 105
  187. },
  188. {
  189. src: ' ',
  190. text: '高一(6)班',
  191. subText: '28人',
  192. value: 106
  193. },
  194. {
  195. src: ' ',
  196. text: '高一(7)班',
  197. subText: '28人',
  198. value: 107
  199. },
  200. {
  201. src: ' ',
  202. text: '高一(8)班',
  203. subText: '38人',
  204. value: 108
  205. },
  206. {
  207. src: ' ',
  208. text: '高一(9)班',
  209. subText: '38人',
  210. value: 109
  211. },
  212. {
  213. src: ' ',
  214. text: '高一(10)班',
  215. subText: '38人',
  216. value: 110
  217. },
  218. {
  219. src: ' ',
  220. text: '高一(11)班',
  221. subText: '38人',
  222. value: 111
  223. },
  224. {
  225. src: ' ',
  226. text: '高一(12)班',
  227. subText: '38人',
  228. value: 112
  229. }
  230. ];
  231. },
  232. methods: {
  233. change(e) {
  234. console.log(e);
  235. /**
  236. * layer: 0 第几级 index
  237. src: '/static/images/basic/color.png'
  238. subIndex: 2 //当前层级下选中项index
  239. subText: '30人' //选中项数据
  240. text: '高一(3)班'
  241. value: 103 //选中项value数据
  242. * */
  243. // 模拟请求
  244. let value = e.value;
  245. let layer = e.layer;
  246. if (layer === 7) {
  247. //实际中以请求数据为准,无下级数据则传空数组
  248. this.receiveData = [];
  249. } else {
  250. uni.showLoading({
  251. title: '请稍候...'
  252. });
  253. setTimeout(() => {
  254. uni.hideLoading();
  255. //请求完成后将数据处理成以下格式,传入,最后一级没有则传空数组
  256. switch (layer) {
  257. case 0:
  258. this.receiveData = [
  259. {
  260. text: '张三',
  261. subText: '男',
  262. value: 11101
  263. },
  264. {
  265. text: '王五',
  266. subText: '男',
  267. value: 11102
  268. },
  269. {
  270. text: '周小小',
  271. subText: '女',
  272. value: 11103
  273. },
  274. {
  275. text: '周小小',
  276. subText: '女',
  277. value: 11103
  278. },
  279. {
  280. text: '周小小',
  281. subText: '女',
  282. value: 11103
  283. }
  284. ];
  285. break;
  286. case 1:
  287. this.receiveData = [
  288. {
  289. text: '他(她)说',
  290. value: 11101
  291. }
  292. ];
  293. break;
  294. case 2:
  295. this.receiveData = [
  296. {
  297. text: '这是一个',
  298. value: 11101
  299. }
  300. ];
  301. break;
  302. case 3:
  303. this.receiveData = [
  304. {
  305. text: '级联选择器',
  306. value: 11101
  307. }
  308. ];
  309. break;
  310. case 4:
  311. this.receiveData = [
  312. {
  313. text: '测试例子',
  314. value: 11101
  315. }
  316. ];
  317. break;
  318. case 5:
  319. this.receiveData = [
  320. {
  321. text: '总共',
  322. value: 11101
  323. }
  324. ];
  325. break;
  326. case 6:
  327. this.receiveData = [
  328. {
  329. text: '8级数据',
  330. value: 11101
  331. }
  332. ];
  333. break;
  334. default:
  335. break;
  336. }
  337. }, 800);
  338. }
  339. },
  340. complete(e) {
  341. console.log(e);
  342. console.log('您选择的数据为:' + e.text);
  343. }
  344. }
  345. };
  346. </script>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/548524
推荐阅读
相关标签
  

闽ICP备14008679号