Vant picker选择器设置默认值导致选择器失效的解决 |
您所在的位置:网站首页 › vant-picker自定义toolbar › Vant picker选择器设置默认值导致选择器失效的解决 |
目录Vant picker选择器设置默认值导致选择器失效说下场景Column 数据结构解决方案总结Vant picker选择器设置默认值导致选择器失效
vant 版本 >=2.12.27 说下场景自定义选择器数据结构是数组对象,picker默认显示第一个或上传选择的项,切换选择器失效。 html 代码: js代码: export default { name: "VantPicker", model: { prop: "value", event: "changed", }, props: { value: { type: [Number, String], default: function () { return ""; }, }, data: { type: Object, default: function () { return { label: "下拉框", rules: "required", title: "下拉框", data: [], }; }, }, "error-message": { type: String, default: function () { return ""; }, }, }, data() { return { defaultIndex: "", newValue: "", showPicker: false, disabled: false, }; }, mounted() { if (this.value) { this.defaultIndex = this.value; // bug在这里 this.setSelectedValue(this.value); } this.disabled = this.data.disabled; }, methods: { clickAction() { if (!this.data.disabled && !this.disabled) { this.showPicker = true; } }, onConfirm(values) { this.newValue = values.text; this.$emit("changed", values.id); this.showPicker = false; }, onChange(picker, value) { console.info(picker, value); }, getCheckedItemByid(id) { let lists = this.data.data ? this.data.data : []; let item = null; for (let i = 0; i < lists.length; i++) { if (id == lists[i].id) { item = lists[i]; break; } } return item; }, getCheckedIndex(id) { let lists = this.data.data ? this.data.data : []; let index = null; for (let i = 0; i < lists.length; i++) { if (id == lists[i].id) { index = i; break; } } return index; }, setSelectedValue(newVal) { let checkedItem = this.getCheckedItemByid(newVal); if (checkedItem) { this.newValue = checkedItem.text; } else { this.$emit("changed", ""); this.newValue = ""; this.defaultIndex = ""; } }, setDisabled(disabled) { this.disabled = disabled; }, }, watch: { value(newVal) { if (!this.$utils.isEmpty(newVal)) { this.defaultIndex = this.getCheckedIndex(this.value); this.setSelectedValue(newVal); } else { this.newValue = ""; this.defaultIndex = ""; } }, }, };问题 选择器的在做选中,点击确认时,选中的值没有发生变化,还是未切换选择之前的值。 问题定为 js代码中行位置: this.defaultIndex = this.value; // bug在这里。 问题分析:这里服务器使用的key值,导致服务器计算picker选择的索引index出错,用户选中picker值的某一项,然后点击右上角的“确认”按钮,picker选中的值没有发生变化。 再看官方API defaultIndex属性的描述:defaultIndex 初始选中项的索引(类型为number),默认为 0。 Column 数据结构当传入多列数据时,columns 为一个对象数组,数组中的每一个对象配置每一列,每一列有以下 key: 键名说明类型values列中对应的备选值ArraydefaultIndex初始选中项的索引,默认为 0numberclassName为对应列添加额外的类名string | Array | objectchildren级联选项Column 解决方案this.defaultIndex = this.value修改如下: this.defaultIndex = this.getCheckedIndex(this.value) // 根据this.value循环数组找到key值选择器中的索引值,赋值给defaultIndex,问题得到解决。选中器colums数据结构如下: [ { id: "101" text: "选项2" },{ id: "102" text: "选项2" } ] 总结以上为个人经验,希望能给大家一个参考,也希望大家多多支持。 赞 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |