Vant DropdownMenu 下拉菜单

引入

app.jsonindex.json中引入组件,默认为ES6版本,
"usingComponents": {
  "van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
  "van-dropdown-item": "@vant/weapp/dropdown-item/index"
}

代码演示

基础用法

<van-dropdown-menu>
  <van-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <van-dropdown-item value="{{ value2 }}" options="{{ option2 }}" />
</van-dropdown-menu>
Page({
  data: {
    option1: [
      { text: 全部商品, value: 0 },
      { text: 新款商品, value: 1 },
      { text: 活动商品, value: 2 },
    ],
    option2: [
      { text: 默认排序, value: a },
      { text: 好评排序, value: b },
      { text: 销量排序, value: c },
    ],
    value1: 0,
    value2: a,
  },
});

自定义菜单内容

通过插槽可以自定义DropdownItem的内容,此时需要使用实例上的toggle方法手动控制菜单的显示

<van-dropdown-menu>
  <van-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <van-dropdown-item id="item" title="{{ itemTitle }}">
    <van-cell title="{{ switchTitle1 }}">
      <van-switch
        slot="right-icon"
        size="24px"
        style=""
        checked="{{ switch1 }}"
        bind:change="onSwitch1Change"
      />
    </van-cell>
    <van-cell title="{{ switchTitle2 }}">
      <van-switch
        slot="right-icon"
        size="24px"
        style=""
        checked="{{ switch2 }}"
        bind:change="onSwitch2Change"
      />
    </van-cell>
    <van-button type="info" block bind:click="onConfirm">
      确定
    </van-button>
  </van-dropdown-item>
</van-dropdown-menu>
Page({
  data: {
    switchTitle1: 包邮,
    switchTitle2: 团购,
    itemTitle: 筛选,
    option1: [
      { text: 全部商品, value: 0 },
      { text: 新款商品, value: 1 },
      { text: 活动商品, value: 2 },
    ],
    value1: 0,
  },

  onConfirm() {
    this.selectComponent(#item).toggle();
  },

  onSwitch1Change({ detail }) {
    this.setData({ switch1: detail });
  },

  onSwitch2Change({ detail }) {
    this.setData({ switch2: detail });
  },
});

自定义选中态颜色

通过active-color属性可以自定义菜单标题和选项的选中态颜色

<van-dropdown-menu active-color="#ee0a24">
  <van-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <van-dropdown-item value="{{ value2 }}" options="{{ option2 }}" />
</van-dropdown-menu>

向上展开

将direction属性值设置为up,菜单即可向上展开

<van-dropdown-menu direction="up">
  <van-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <van-dropdown-item value="{{ value2 }}" options="{{ option2 }}" />
</van-dropdown-menu>

禁用菜单

<van-dropdown-menu>
  <van-dropdown-item value="{{ value1 }}" disabled options="{{ option1 }}" />
  <van-dropdown-item value="{{ value2 }}" disabled options="{{ option2 }}" />
</van-dropdown-menu>

API

DropdownMenu Props

参数 说明 类型 默认值
active-color 菜单标题和选项的选中态颜色 string #1989fa
direction v2.0.1 菜单展开方向,可选值为up string down
z-index 菜单栏 z-index 层级 number | string 10
duration 动画时长,单位秒 number | string 0.2
overlay 是否显示遮罩层 boolean true
close-on-click-overlay 是否在点击遮罩层后关闭菜单 boolean true
close-on-click-outside v2.0.7 是否在点击外部元素后关闭菜单 boolean true

DropdownItem Props

参数 说明 类型 默认值
value 当前选中项对应的 value,可以通过v-model双向绑定 number | string
title 菜单项标题 string 当前选中项文字
options 选项数组 Option[] []
disabled 是否禁用菜单 boolean false
title-class 标题额外类名 string
get-container v2.2.4 指定挂载的节点,用法示例 string | () => Element

DropdownItem Events

事件名 说明 回调参数
change 点击选项导致 value 变化时触发 value
open 打开菜单栏时触发
opened 打开菜单栏且动画结束后触发
close 关闭菜单栏时触发
opened 关闭菜单栏且动画结束后触发

DropdownItem Slots

名称 说明
default 菜单内容
title 自定义标题,不支持动态渲染

DropdownItem 方法

通过 ref 可以获取到 DropdownItem 实例并调用实例方法,详见 组件实例方法

方法名 说明 参数 返回值
toggle 切换菜单展示状态,传true为显示,false为隐藏,不传参为取反 show?: boolean

Option 数据结构

键名 说明 类型
text 文字 string
value 标识符 number | string
icon 左侧 图标名称 或图片链接 string

实例演示

作者:andy,如若转载,请注明出处:https://www.web176.com/vant/15517.html

(0)
打赏 支付宝 支付宝 微信 微信
andy的头像andy
上一篇 2023年4月14日
下一篇 2023年4月14日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


Fatal error: Uncaught JSMin_UnterminatedStringException: JSMin: Unterminated String at byte 424: ", in /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:214 Stack trace: #0 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action() #1 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(257): JSMin::minify() #3 [internal function]: AO_Minify_HTML->_removeScriptCB() #4 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(108): preg_replace_callback() #5 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(47): AO_Minify_HTML->process() #6 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/autoptimizeHTML.php(105): AO_Minify_HTML::minify() #7 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/aut in /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 214