cloud-ui.vusion
Version:
Vusion Cloud UI
222 lines (203 loc) • 6.92 kB
Markdown
# 多项选择框 MultiSelect
## 示例
### 基本形式
``` vue
<template>
<u-multi-select :data="options" v-model="value"></u-multi-select>
</template>
<script>
export default {
data() {
return {
value: [],
options: [{
value: '选项1',
text: '黄金糕'
}, {
value: '选项2',
text: '双皮奶'
}, {
value: '选项3',
text: '蚵仔煎'
}, {
value: '选项4',
text: '龙须面'
}, {
value: '选项5',
text: '北京烤鸭',
}],
};
},
watch: {
value(newValue) {
console.log(newValue);
}
}
};
</script>
```
### 过滤选项
``` vue
<template>
<u-multi-select filter :data="options" v-model="value"></u-multi-select>
</template>
<script>
export default {
data() {
return {
value: [],
options: [{
value: '选项1',
text: '黄金糕'
}, {
value: '选项2',
text: '双皮奶'
}, {
value: '选项3',
text: '蚵仔煎'
}, {
value: '选项4',
text: '龙须面'
}, {
value: '选项5',
text: '北京烤鸭',
}],
};
}
};
</script>
```
### 自定义过滤方法
``` vue
<template>
<u-multi-select filter :filter-method="filterMethod" :data="options" v-model="value" size="huge"></u-multi-select>
</template>
<script>
export default {
data() {
return {
value: [],
options: [
{ text: 'Alabama', value: 'Alabama' },
{ text: 'Alaska', value: 'Alaska' },
{ text: 'Arizona', value: 'Arizona' },
{ text: 'Arkansas', value: 'Arkansas' },
{ text: 'California', value: 'California' },
{ text: 'Colorado', value: 'Colorado' },
{ text: 'Connecticut', value: 'Connecticut' },
{ text: 'Delaware', value: 'Delaware' },
{ text: 'Florida', value: 'Florida' },
{ text: 'Georgia', value: 'Georgia' },
{ text: 'Hawaii', value: 'Hawaii' },
{ text: 'Idaho', value: 'Idaho' },
{ text: 'Illinois', value: 'Illinois' },
],
};
},
watch: {
value(newValue) {
console.log(newValue);
}
},
methods: {
filterMethod(data,query) {
const tdata = data.filter((item) => {
if(item.value.toLowerCase().indexOf(query.toLowerCase()) > -1)
return item;
else
return false;
});
return tdata;
}
}
};
</script>
```
### 大小扩展
``` vue
<template>
<u-linear-layout direction="vertical">
<u-linear-layout>
<u-multi-select :data="options" filter placeholder="small" :value="[]" size="small"></u-multi-select>
<u-multi-select :data="options" filter placeholder="small normal" :value="[]" size="small normal"></u-multi-select>
<u-multi-select :data="options" filter placeholder="small large" :value="[]" size="small large"></u-multi-select>
</u-linear-layout>
<u-linear-layout>
<u-multi-select :data="options" filter placeholder="normal small" :value="[]" size="normal small"></u-multi-select>
<u-multi-select :data="options" filter placeholder="normal" :value="[]" size="normal"></u-multi-select>
<u-multi-select :data="options" filter placeholder="normal large" :value="[]" size="normal large"></u-multi-select>
</u-linear-layout>
<u-linear-layout>
<u-multi-select :data="options" filter placeholder="large small" :value="[]" size="large small"></u-multi-select>
<u-multi-select :data="options" filter placeholder="large normal" :value="[]" size="large normal"></u-multi-select>
<u-multi-select :data="options" filter placeholder="large" :value="[]" size="large"></u-multi-select>
</u-linear-layout>
<u-linear-layout>
<u-multi-select :data="options" filter placeholder="huge small" :value="[]" size="huge small"></u-multi-select>
<u-multi-select :data="options" filter placeholder="huge normal" :value="[]" size="huge normal"></u-multi-select>
<u-multi-select :data="options" filter placeholder="huge large" :value="[]" size="huge large"></u-multi-select>
</u-linear-layout>
<u-linear-layout>
<u-multi-select :data="options" filter placeholder="large" :value="[]" size="large"></u-multi-select>
</u-linear-layout>
<u-linear-layout>
<u-multi-select :data="options" filter placeholder="huge" :value="[]" size="huge"></u-multi-select>
</u-linear-layout>
</u-linear-layout>
</template>
<script>
export default {
data() {
return {
options: [{
value: '选项1',
text: '黄金糕'
}, {
value: '选项2',
text: '双皮奶'
}, {
value: '选项3',
text: '蚵仔煎'
}, {
value: '选项4',
text: '龙须面'
}, {
value: '选项5',
text: '北京烤鸭',
}],
};
}
};
</script>
```
## MultiSelect API
### Attrs/Props
| Attr/Prop | Type | Default | Description |
| --------- | ---- | ------- | ----------- |
| data | Array\<{ text, value }\> | | Data书写方式中的数据列表 |
| value.sync, v-model | Array | | 当前选择的值 |
| field | String | `'text'` | 显示文本字段 |
| readonly | Boolean | `false` | 是否只读 |
| disabled | Boolean | `false` | 是否禁用 |
| size | String | `normal normal` | 控制宽高属性,第一个值表示高度属性,第二值表示宽度,值有`small`,`normal`,`large`,`huge` 四个值可以互相组合 |
| filter | Boolean | `false` | 支持输入,搜索匹配项 |
| filter-method | Function || 自定义输入搜索的方法 |
| placeholder | String | `'请选择'` | 默认展示的文字,在`filter=true`时生效 |
### Events
#### @select
选择某一项前触发
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event.selected | Object | 选择项对象 |
| $event.value | Any | 选择项的值 |
#### @close
点击选中项的关闭图标
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event.index | Number | 点击选择项的索引 |
| $event.value | Array | 选择项的值 |
#### @toggle
选择项展示和隐藏触发函数
| Param | Type | Description |
| ----- | ---- | ----------- |
| $event.open | Boolean | 值表示展示还是隐藏 |