vant框架picker选择器形式列表,以及封装

以下是VantUi插件中常用的各种选择器下拉列表,项目中遇到,就在这里总结以下,下面是代码

<template>

  <div class="select-wrapper">

    <van-cell title="下拉菜单形式分类" class="title"/>

    <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }">

     第一种Vant -DropdownMenu 下拉框单选形式

    </van-divider>

    <van-divider :style="{ color: 'red', borderColor: '#1989fa', padding: '0 16px' }">

      Array = [

        {

        text: "东来汽车维修",

        value: 0

      }, {

        text: "广汽维修中心",

        value: 1

      }]

    </van-divider>

    <van-dropdown-menu>

      <van-dropdown-item v-model="value" :options="companyName" />

      </van-dropdown-item>

    </van-dropdown-menu>

    <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }">

      第二种picker选择器下拉框数组单列模式单选模式

    </van-divider>

    <van-divider :style="{ color: 'red', borderColor: '#1989fa', padding: '0 16px' }">

      数组形式 : ['杭州', '宁波', '温州', '嘉兴', '湖州']

    </van-divider>

       <van-field

        readonly

        clickable

        label="居住城市"

        :value="value1"

        placeholder="选择最喜欢居住的城市"

        @click="showPicker = true"

      />

      <van-popup v-model="showPicker" position="bottom">

        <van-picker

          show-toolbar

          title="选择最喜欢居住的城市"

          :columns="city"

          @cancel="onCancel"

          @confirm="onConfirm1"

        />

      </van-popup>

      <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }">

        第三种picker选择器下拉框数组对象模式单选模式

      </van-divider>

        <van-divider :style="{ color: 'red', borderColor: '#1989fa', padding: '0 16px' }">

         cityArray: [{cityName: '杭州', id: 10},{cityName: '宁波', id: 12},{cityName: '温州', id: 14}]

      </van-divider>

        <van-field

          readonly

          clickable

          label="旅游城市"

          :value="value2"

          placeholder="选择你最喜欢的城市"

          @click="showPicker2 = true"

        />

        <van-popup v-model="showPicker2" position="bottom">

          <van-picker

            show-toolbar

            value-key="cityName"

            title="选择你最喜欢的城市"

            :columns="cityArray"

            @cancel="showPicker2 = false"

            @confirm="onConfirm2"

          />

        </van-popup>

        <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }">

            第四种van-dropdown-item下拉框多选

        </van-divider>

        <div style="position:relative;">

         <van-cell-group>

          <van-field v-model="value3" readonly placeholder="请选择你去过的城市"/>

        </van-cell-group> 

        <!-- 将van-dropdown-menu组件定位在field输入框内,结合在一起显示 -->

        <van-dropdown-menu style="position:absolute;top:5px;right:40px;background:none;">

          <van-dropdown-item  ref="item">

            <van-switch-cell v-model="switch1" title="杭州" />

            <van-switch-cell v-model="switch2" title="宁波"/>

            <van-switch-cell v-model="switch3" title="温州"/>

            <van-button block type="info" @click="onConfirm3">确认</van-button>

          </van-dropdown-item>

        </van-dropdown-menu>

        </div>

         <van-divider :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }">

            第五种van-checkbox-group下拉框多选

        </van-divider>

        <van-field

        readonly

        clickable

        label="居住城市"

        :value="value4"

        placeholder="选择去过的城市"

        @click="showPicker4 = true"

      />

      <van-popup v-model="showPicker4" position="bottom">

        <van-row class="he-44">

          <van-col span="8" class="cancel" @click="showPicker4 = false">取消</van-col>

          <van-col span="8" class="tip">选择去过的城市</van-col>

          <van-col span="8" class="confirm" @click="onConfirm4">确定</van-col>

        </van-row>

        <van-checkbox-group v-model="result">

          <van-cell-group>

            <van-cell

              v-for="(item, index) in cityArray"

              clickable

              :key="index"

              :title="item.cityName"

              @click="toggle(index)"

            >

              <van-checkbox

                :name="item"

                ref="checkboxes"

                slot="right-icon"

              />

            </van-cell>

          </van-cell-group>

        </van-checkbox-group>

      </van-popup>

  </div>

</template>

<script>

export default {

  data() {

    return {

      value: 0,

      value1: '',

      value2: '',

      value3: '',

      value4: '',

      cityId: '',

      cityValue: '',

      showPicker: false,

      showPicker2: false,

      showPicker3: false,

      showPicker4: false,

      city: ['杭州', '宁波', '温州', '嘉兴', '湖州'],

      cityArray: [

        {cityName: '杭州', id: 10},

        {cityName: '宁波', id: 12},

        {cityName: '温州', id: 14},

        {cityName: '嘉兴', id: 16},

        {cityName: '湖州', id: 18}

      ],

      switch1: false,

      switch2: false,

      switch3: false,

      playCityName: [],

      playCityId: [],

      companyName: [

        {

        text: "东来汽车维修",

        value: 0

      }, {

        text: "广汽维修中心",

        value: 1

      }],

      result: [],

    };

  },

  methods: {

    onCancel() {

      this.showPicker = false;

    },

    onConfirm1(value) {

      this.$toast(value)

      this.value1 = value;

      this.showPicker = false;

    },

    onConfirm2(value) {

      console.log(value)

      this.$toast(value.cityName+value.id)

      this.value2 = value.cityName

      this.showPicker2 = false;

    },

    onConfirm3(value) {

      this.$refs.item.toggle();

      this.value3Arr = []

      if(this.switch1 === true) {

       this.value3Arr.push('杭州')

      } 

      if(this.switch2 === true) {

        this.value3Arr.push('宁波')

      }

      if(this.switch3 === true) {

       this.value3Arr.push('温州')

      }

      this.value3 =this.value3Arr.join(',')

    },

    onConfirm4() {

      this.playCityName = []

      this.playCityId = []

      this.result.forEach(item => {

        this.playCityName.push(item.cityName)

        this.playCityId.push(item.id)

      })

      //这里要转成字符串形式再进行赋值,因为v-model此时接受的是字符串而不是数组

      // this.value4 = this.playCityName

      this.value4 = this.playCityName.join(',')

      this.cityId = this.playCityId

      this.showPicker4 = false;

    },

    toggle(index) {

      this.$refs.checkboxes[index].toggle();

    },

  }

};

</script>

<style scoped>

.select-wrapper {

  width: 100%;

  height:1000px;

  overflow-y: scroll;

  background: #fff;

}

.van-dropdown-menu__title::after {

  position: absolute;

  top: 50%;

  right: -67px !important;

  margin-top: -5px;

  border: 3px solid;

  border-color: transparent transparent currentColor currentColor;

  -webkit-transform: rotate(-45deg);

  transform: rotate(-45deg);

  opacity: 0.8;

  content: "";

}

.title {

  background: #007aff!important;

  opacity: .5;

  color: #fff;

}

.he-44 {

  height: 44px;

  line-height: 44px;

}

.cancel {

  color: #007aff!important;

}

.tip {

  color: black;

}

.confirm {

  color: #007aff!important;

}

</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容