npm package: @retailwe/ui-dropdown-menu
Description: ## 引入
Latest version: 0.0.26

# dropdown-menu 下拉菜单

## 引入

全局引入，在 miniprogram 根目录下的`app.json`中配置，局部引入，在需要引入的页面或组件的`index.json`中配置。

```json
// app.json 或 index.json
"usingComponents": {
  "wr-dropdown-menu": "@retailwe/ui-dropdown-menu/index"
}
```

## 代码演示

### 基础用法

```html
<wr-dropdown-menu>
  <wr-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <wr-dropdown-item value="{{ value2 }}" options="{{ option2 }}" />
</wr-dropdown-menu>
```

```js
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',
  },
});
```

### 自定义菜单内容

```html
<wr-dropdown-menu>
  <wr-dropdown-item value="{{ value1 }}" options="{{ option1 }}" />
  <wr-dropdown-item id="item" title="{{ itemTitle }}">
    <wr-cell title="{{ switchTitle1 }}">
      <wr-icon
        slot="right-icon"
        size="40rpx"
        color="{{switch1 ? '#1989fa' : '#969799'}}"
        name="{{switch1 ? 'selected' : 'selected-border'}}"
        bind:tap="onSwitch1Change"
      />
    </wr-cell>
    <wr-cell title="{{ switchTitle2 }}">
      <wr-icon
        slot="right-icon"
        size="40rpx"
        color="{{switch2 ? '#1989fa' : '#969799'}}"
        name="{{switch2 ? 'selected' : 'selected-border'}}"
        bind:tap="onSwitch2Change"
      />
    </wr-cell>
    <button type="primary" bind:tap="onConfirm">
      确定
    </button>
  </wr-dropdown-item>
</wr-dropdown-menu>
```

```js
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',
    switchTitle1: '包邮',
    switchTitle2: '团购',
    itemTitle: '筛选',
    switch1: false,
    switch2: false,
  },

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

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

  onSwitch2Change() {
    this.setData({ switch2: !this.data.switch2 });
  },
});
```

### 自定义选中状态颜色

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

### 向上展开

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

### 禁用菜单

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

## API

### DropdownMenu Props

| Attribute              | Description                    | Type      | Default   | Version |
| ---------------------- | ------------------------------ | --------- | --------- | ------- |
| active-color           | 菜单标题和选项的选中态颜色     | _string_  | `#1989fa` | -       |
| z-index                | 菜单栏 z-index 层级            | _number_  | `10`      | -       |
| duration               | 动画时长，单位毫秒             | _number_  | `200`     | -       |
| direction              | 菜单展开方向，可选值为 up      | _string_  | `down`    | -       |
| overlay                | 是否显示遮罩层                 | _boolean_ | `true`    | -       |
| close-on-click-overlay | 是否在点击遮罩层后关闭菜单     | _boolean_ | `true`    | -       |
| close-on-click-outside | 是否在点击外部 menu 后关闭菜单 | _boolean_ | `true`    | -       |

### DropdownItem Props

| Attribute   | Description            | Type               | Default                 | Version |
| ----------- | ---------------------- | ------------------ | ----------------------- | ------- |
| value       | 当前选中项对应的 value | _string \| number_ | -                       | -       |
| title       | 菜单项标题             | _string_           | Text of selected option | -       |
| options     | 选项数组               | _Option[]_         | `[]`                    | -       |
| disabled    | 是否禁用菜单           | _boolean_          | `false`                 | -       |
| title-class | 标题额外类名           | _string_           | -                       | -       |

### DropdownItem Events

| Event  | Description                   | Arguments |
| ------ | ----------------------------- | --------- |
| change | 点击选项导致 value 变化时触发 | value     |
| close  | 关闭菜单栏时触发              | -         |

### DropdownItem Methods

通过 selectComponent(id) 可访问

| Name   | Attribute     | Return value | Description      |
| ------ | ------------- | ------------ | ---------------- |
| toggle | show: boolean | -            | 切换菜单是否展示 |

### Data Structure of Option

| Key   | Description                                | Type               |
| ----- | ------------------------------------------ | ------------------ |
| text  | 文字                                       | _string_           |
| value | 标识符                                     | _string \| number_ |
| icon  | 左侧图标名称或图片链接，可选值见 Icon 组件 | _string_           |

### DropdownMenu 外部样式类

| 类名     | 说明             |
| -------- | ---------------- |
| wr-class | 根节点外部样式类 |

### DropdownItem 外部样式类

| 类名     | 说明             |
| -------- | ---------------- |
| wr-class | 根节点外部样式类 |