【实战经验】vant中picker选择器封装,让你的表单选择更简单

news/2024/11/22 17:32:59/

前言

对于选择器组件,vant 中的 picker 组件是一个非常合适的选择。它不仅提供了灵活的配置选项,还可以很方便地与其他 vant 组件结合使用,帮助我们快速搭建出漂亮、易用的移动端页面。在本文中,我将为大家介绍如何基于 vantpicker 组件进行二次封装,以便更好地满足实际的业务需求。


实现思路

  1. 首先定义一个子组件页面用来封装选择器;
  2. 在父组件中(使用的页面)引入封装组件(子组件)并注册,然后在页面中使用,在父组件中给标签(注册的组件名)上绑定多个属性, 属性上挂载需要传递的值,通过 props 在子组件(封装文件)接收数据;
  3. 在子组件中自定义确定的事件,调用这个事件后,子组件通过 this.$emit('自定义事件名',要传递的数据) 发送父组件可以监听的数据,最后父组件监听子组件事件,调用事件并接收传递过来的数据。

定义的参数

参数描述
selectValue绑定值 model
keyValue绑定的 key 字段
keyLabel绑定的 value 字段
columns绑定的 option 数据源
required是否显示红色 * 校验
rules校验规则
required是否必填
confirm选中的回调函数

封装文件

<template><div><van-field v-model="textValue" v-bind="$attrs" :name="$attrs.name" :rules="rules" :required="required" :readonly="readonly":is-link="islink" @click="show = !show" /><van-popup v-model="show" get-container="body" position="bottom"><van-picker :columns="columns" show-toolbar :value-key="keyValue" :title="$attrs.label" @cancel="show = !show" @confirm="onConfirm"><template #option="option">{{ option[keyLabel] }}</template></van-picker></van-popup></div>
</template><script>
export default {props: {required: {type: Boolean,},readonly: {type: Boolean,},islink: {type: Boolean,},columns: {type: Array,},rules: {type: Array,},selectValue: {type: String,},keyValue: {type: String,},keyLabel: {type: String,},},data() {return {show: false,textValue: "",selectOptions: [],};},methods: {onConfirm(obj) {this.textValue = obj.label;this.show = !this.show;this.$emit("confirm", obj);},formatterValue(value) {let str = "";if (!this.columns.length || !value.length) {str = "";} else {let oArr = this.columns.filter((item) => {return item[this.keyValue].toString() == value.toString();});str = oArr[0][this.keyLabel];}return str;},//根据key值格式化成picker需要的option格式formatColumnsByKey() {let arr = [];let value = this.keyValue ? this.keyValue : "value";let label = this.keyLabel ? this.keyLabel : "label";this.columns.map((item) => {arr.push({label: item[label],value: item[value],});});this.selectOptions = arr;},},watch: {columns: {handler(newValue) {this.textValue = this.formatterValue(this.selectValue ? this.selectValue : "");},deep: true,immediate: true,},selectValue: {handler(newValue) {this.textValue = this.formatterValue(newValue ? newValue : "");},deep: true,immediate: true,},},
};
</script>

使用文件

<template><div><van-form validate-first><VanSelect name="qylx" label="企业类型" placeholder="请选择企业类型" :selectValue="qylx" :keyValue="`value`" :keyLabel="`label`" :required="true":readonly="true" :columns="qylxOption" :rules="rules.qybh" @confirm="qylxConfirm" /><div class="btnBomBox"><van-button round size="small" block @click="submitOn" type="info">提交</van-button></div></van-form></div>
</template><script>
import VanSelect from "@/components/vanSelect/index";
export default {components: {VanSelect,},data() {return {qylx: "",qylxOption: [{ label: "自营企业", value: "1" },{ label: "其他企业", value: "2" },],rules: {qybh: [{required: true,message: "请选择企业类型",},],},};},methods: {// 点击确定qylxConfirm(value) {this.qylx = value.value;},// 提交submitOn() {console.log(this.qylx);},},
};
</script><style scoped>
.btnBomBox {padding: 0px 16px;display: flex;justify-content: center;
}
</style>

实现效果

在这里插入图片描述


http://www.ppmy.cn/news/340969.html

相关文章

中文简体繁体转换

<?php namespace api\helpers; /** define zh convert functions* 2019-10-23 use str_replace for speed* zh_hans_to_zh_hant()&#xff1a;简体到繁体转换* zh_hant_to_zh_hans()&#xff1a;繁体到简体转换* zh()&#xff1a;自动判断默认语言和当前语言&#xff0c;根…

html设置字体为方正小标宋,如何安装方正小标宋字体

字体是我们电脑中比较常用的工具&#xff0c;在编辑文档过程中经常需要用到一些特殊的字体&#xff0c;比如方正小标宋简体。如何在自己的电脑中添加需要的字体呢&#xff0c;下面小编以方正小标宋简体字体为例讲述一下电脑中如何添加字体。今天小编告诉大家添加方正小标宋简体…

简体字与繁体字

简体字与繁体字 注&#xff1a;繁体字是大陆的叫法&#xff0c;台湾称为“正体字”。虽然只是一个叫法的区别&#xff0c;但是与“简体字”一对应&#xff0c;就可以看出其中的褒贬了。 ——May 这里&#xff0c;首先列出九十六个汉字&#xff08;简体&#xff09;&#xff1a…

汉字简体繁体转换

<html><head><meta http-equivContent-Type content"text/html; charsetGB2312" /><title>汉字简体繁体转换</title></head><body><center><h3>汉字<u><b>简体/<font color"#FF0000"…

中文繁体字与简体字转换

/* * $Id: ChangeCode.java$ * * 来自&#xff1a;http://thorlst.blog.163.com/blog/static/59275749201122402041317/ */ package com.bizatworktech.bizessence.in.web.util; import java.util.Arrays; public class ChangeCode { public final static String simple…

C语言结构体使用及解析

文章目录 前言一、结构体使用示例二、结构体和指针三、结构体的多种使用方式总结 前言 C语言中结构体是一种用户自定义的数据类型&#xff0c;可以将多个不同类型的数据组合在一起&#xff0c;形成一个具有独立意义的复合数据类型。结构体通过关键字 struct 进行定义&#xff…

方正字库中英文对照表 (简体部分)

方正字库中英文对照表 (简体部分) 中文字体名 英文字体名 文件名 PS name 汉字数 方正报宋简体 FZBaoSong-Z04S FZBSJW FZBSJW—GB1-0 7156 方正粗圆简体 FZCuYuan-M03S FZY4JW FZY4JW—GB1-0 7156 方正大标宋简体 FZDaBiaoSong-B06S FZDBSJW FZDBSJW—GB1-0 7156 方正大黑简体…

中文繁体字转简体

首先&#xff0c;复制以下代码并命名为langconv.py #!/usr/bin/env python # -*- coding: utf-8 -*-from copy import deepcopy import retry:import psycopsyco.full() except:passtry:from zh_wiki import zh2Hant, zh2Hans except ImportError:from zhtools.zh_wiki import…