vant-picker二次封装

摘要:
痛点在项目经常会遇到这样的设计,下拉选择框,在vant中没有提供直接的select组件,但是可以使用Field、Popup和Picker这三个组件组合来完成。this.show;}},watch:{selectValue:function{this.result=newVal;},result{this.$emit;}}};效果链接:https://www.jianshu.com/p/3c6609d5dad3补充实际应用中需要拿到下拉选择的id值,但用上面封装的只能拿到text,所以做了如下修改1、组件SelectPicker.vue˂van-fieldv-model="result"v-bind="$attrs"readonlyis-link@click="show=!
痛点
vant-picker二次封装第1张

在项目经常会遇到这样的设计,下拉选择框,在vant中没有提供直接的select组件,但是可以使用FieldPopupPicker这三个组件组合来完成。
如果页面中只有一个select这样做做也还可以,但是现在页面中有三个select就有点繁琐了,所以考虑进行组件的封装。 使用期望
<van-field-select-picker
          label="物料类型"placeholder="选择类型"v-model="materielType"
          :columns="materielTypeList"
 />

我希望是在页面中这样使用组件

新建组件
vant-picker二次封装第2张

在项目的src/components文件夹下面新建了一个VanFieldSelectPicker.vue文件,具体代码如下,这里主要就是学习了一下组件嵌套时自定义v-model,组件中暂时也没考虑太多其他的东西,有什么问题只能遇到了再更新。
<template>
  <div>
    <van-field
      v-model="result"v-bind="$attrs"readonly
      is-link
      @click="show = !show"
    />
    <van-popup v-model="show" position="bottom">
      <van-picker
        :columns="columns"show-toolbar
        :title="$attrs.label"@cancel="show = !show"@confirm="onConfirm"
      />
    </van-popup>
  </div>
</template>

<script>export default{
  model:{
    prop: "selectValue"},props:{
    columns:{
      type: Array},selectValue:{
      type: String}
  },data() {
    return{
      show: false,result: this.selectValue
    };
  },methods:{
    onConfirm(value) {
      this.result =value;
      this.show = !this.show;
    }
  },watch:{
    selectValue: function(newVal) {
      this.result =newVal;
    },result(newVal) {
      this.$emit("input",newVal);
    }
  }
};
</script>

<style></style>
效果
            <van-field-select-picker
              label="物料类型"placeholder="请选择"v-model="value1"
              :columns="[1, 2, 3]"
            />
            <van-field-select-picker
              label="品牌"placeholder="请选择"v-model="value2"
              :columns="[1, 2, 3]"
            />
            <van-field-select-picker
              label="规格"placeholder="请选择"v-model="value3"
              :columns="[1, 2, 3]"
            />
vant-picker二次封装第3张
链接:https://www.jianshu.com/p/3c6609d5dad3
补充

实际应用中需要拿到下拉选择的id值,但用上面封装的只能拿到text,所以做了如下修改

1、组件SelectPicker.vue

<template>
    <div>
        <van-field
                v-model="result"v-bind="$attrs"readonly
                is-link
                @click="show = !show"
        />
        <van-popup v-model="show" position="bottom">
            <van-picker
                    :columns="columns"show-toolbar
                    :title="$attrs.label"@cancel="show = !show"@confirm="onConfirm"
            />
        </van-popup>
    </div>
</template>

<script>export default{
        model:{
            prop: "selectValue"},props:{
            columns:{
                type: Array},selectValue:{
                type: String},
            name:{
                type: String  //父组件传进来一个name
            }
        },data() {
            return{
                show: false,result: this.selectValue
            };
        },methods:{
            onConfirm(value) {
                this.result = value.label;
                this.show = !this.show;
                this.$emit("getMessage", this.name,value.value);//把value值传给父组件
            },},watch:{
            selectValue: function(newVal) {
                this.result =newVal;
            },result(newVal) {
                this.$emit("input",newVal);
            }
        }
    };
</script>
<style></style>

2、父组件

<template v-else-if="item.type.name == 'picklist' >
   <input type="hidden" value="":id=item.name>
             <select-picker
                   :label="item.label"
                    :name="item.name"placeholder="请选择"v-model="dataList[item.name]":columns="item.type.picklistValues"@getMessage="setValue"/>
 </template>
<script>
export default {
data() {
return {
name:'',
}
},
methods: {
setValue(name,value){
         $("#"+name).val(value);
},
    },
}
</script>

免责声明:文章转载自《vant-picker二次封装》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇正负无穷float('inf')的一些用法redis make报错下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

nacos产生大量日志处理

/我们发现nacos产生大量日志,浪费磁盘空间资源将配置文件nacos/conf/application.properties的生产日志功能关闭--进入配置文件vim./nacos/conf/application.properties--将true改为falseserver.tomcat.accesslog.enabled=true--重启nacos./n...

嵌入式linux GUI--DirectFB + GTK至尊秘笈

我开始在x86上构建GTK环境。首先,我选择了最新版本。然后,我看到了GTK在帧缓冲区上以两种模式运行的介绍:DirectFB和linuxfb,而Linuxfb项目似乎已经停止。主要方向是DirectFB。后来,我找到了一个DirectFB+GTK的英文文档,它基本上使用了最新版本。许多软件包可以使用系统自己的,因此您可以编译必要的源代码。一开始,编译并不成...

【转载】SecureCRT配色推荐和永久设置

2.配置文件夹和其他颜色选项==“全局选项==”终端==“外观==”ANSI颜色单击第二行中的第五个色块以修改文件夹颜色:对第二个色块执行相同的操作以修改压缩包和jar包的颜色:如果设置后文件夹和其他的颜色无效,您可以对第二行中设置背景色和字体颜色的颜色块执行相同的操作!...

基于智能网卡(Smart Nic)的Open vSwitch卸载方案简介

SmartNic技术的初衷是以比普通CPU低得多的成本支持各种虚拟化功能,如sriov、overlay/decap和卸载一些vSwitch处理逻辑。目前,业界还没有完美的SmartNic解决方案来解决传统的vSwitch性能瓶颈,每种解决方案的实施方式也各不相同。没有统一的解决方案。图1.不同SmartNic架构的比较。2.基于SmartNic的OVS卸载方...

阿里巴巴开源性能监控神器Arthas初体验

今天跟大家介绍一款阿里巴巴开源的性能分析神器Arthas官方网站:https://alibaba.github.io/arthas/index.htmlArthas能为你做什么事情呢?接下来,我们找个项目实际体验一下Arthas。﹏﹏﹏﹏上述几个命令只是性能测工作中常用的一些操作,Arthas还有很多其他维度的监控数据,大家可以去官网看下用户手册学习更多操作...

10 TCP限流技术

TCP流限制的原因是接收方可以完全接受消息,以确保数据安全而不会丢失。首先,窗口机制引入了发送方和接收方都有一个窗口。当发送方发送数据时,将发送落入窗口中的数据。当接收器接收到数据时,落入接收器窗口的数据将被接受。可以看出,流量会受到窗口大小II的限制。滑动窗口技术1TCP滑动窗口技术通过动态改变窗口大小来调整两台主机之间的数据传输。...