[new feature] Picker: add title slot (#2811)

This commit is contained in:
neverland 2019-02-20 21:00:57 +08:00 committed by GitHub
parent da91631b0d
commit ea36edbd1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 55 additions and 9 deletions

View File

@ -147,6 +147,11 @@ Picker events will pass different parameters according to the columns are single
| cancel | Triggered when click cancel button | Single columncurrent valuecurrent index<br>Multiple columnscurrent valuescurrent indexes | | cancel | Triggered when click cancel button | Single columncurrent valuecurrent index<br>Multiple columnscurrent valuescurrent indexes |
| change | Triggered when current option changed | Single columnPicker instance, current valuecurrent index<br>Multiple columnsPicker instance, current valuescolumn index | | change | Triggered when current option changed | Single columnPicker instance, current valuecurrent index<br>Multiple columnsPicker instance, current valuescolumn index |
### Slot
| name | Description |
|------|------|
| title | Custom title |
### Data struct of columns ### Data struct of columns

View File

@ -54,7 +54,12 @@ export default sfc({
onChange(columnIndex) { onChange(columnIndex) {
if (this.simple) { if (this.simple) {
this.$emit('change', this, this.getColumnValue(0), this.getColumnIndex(0)); this.$emit(
'change',
this,
this.getColumnValue(0),
this.getColumnIndex(0)
);
} else { } else {
this.$emit('change', this, this.getValues(), columnIndex); this.$emit('change', this, this.getValues(), columnIndex);
} }
@ -96,7 +101,10 @@ export default sfc({
// set options of column by index // set options of column by index
setColumnValues(index, options) { setColumnValues(index, options) {
const column = this.children[index]; const column = this.children[index];
if (column && JSON.stringify(column.options) !== JSON.stringify(options)) { if (
column &&
JSON.stringify(column.options) !== JSON.stringify(options)
) {
column.options = options; column.options = options;
column.setIndex(0); column.setIndex(0);
} }
@ -153,7 +161,10 @@ export default sfc({
<div class={bem('cancel')} onClick={this.onCancel}> <div class={bem('cancel')} onClick={this.onCancel}>
{this.cancelButtonText || t('cancel')} {this.cancelButtonText || t('cancel')}
</div>, </div>,
this.title && <div class={['van-ellipsis', bem('title')]}>{this.title}</div>, this.slots('title') ||
(this.title && (
<div class={['van-ellipsis', bem('title')]}>{this.title}</div>
)),
<div class={bem('confirm')} onClick={this.onConfirm}> <div class={bem('confirm')} onClick={this.onConfirm}>
{this.confirmButtonText || t('confirm')} {this.confirmButtonText || t('confirm')}
</div> </div>
@ -169,11 +180,7 @@ export default sfc({
<Loading /> <Loading />
</div> </div>
)} )}
<div <div class={bem('columns')} style={columnsStyle} onTouchmove={prevent}>
class={bem('columns')}
style={columnsStyle}
onTouchmove={prevent}
>
{columns.map((item, index) => ( {columns.map((item, index) => (
<PickerColumn <PickerColumn
valueKey={this.valueKey} valueKey={this.valueKey}
@ -187,7 +194,10 @@ export default sfc({
}} }}
/> />
))} ))}
<div class={['van-hairline--top-bottom', bem('frame')]} style={frameStyle} /> <div
class={['van-hairline--top-bottom', bem('frame')]}
style={frameStyle}
/>
</div> </div>
</div> </div>
); );

View File

@ -27,3 +27,14 @@ exports[`column watch default index 2`] = `
</ul> </ul>
</div> </div>
`; `;
exports[`render title slot 1`] = `
<div class="van-picker">
<div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div>Custom title<div class="van-picker__confirm">确认</div>
</div>
<div class="van-picker__columns" style="height: 220px;">
<div class="van-hairline--top-bottom van-picker__frame" style="height: 44px;"></div>
</div>
</div>
`;

View File

@ -117,3 +117,18 @@ test('column watch default index', async () => {
wrapper.vm.defaultIndex = 2; wrapper.vm.defaultIndex = 2;
expect(wrapper).toMatchSnapshot(); expect(wrapper).toMatchSnapshot();
}); });
test('render title slot', () => {
const wrapper = mount({
template: `
<picker show-toolbar>
<template v-slot:title>Custom title</template>
</picker>
`,
components: {
Picker
}
});
expect(wrapper).toMatchSnapshot();
});

View File

@ -150,6 +150,11 @@ Picker 组件的事件会根据 columns 是单列或多列返回不同的参数
| cancel | 点击取消按钮时触发 | 单列:选中值,选中值对应的索引<br>多列:所有列选中值,所有列选中值对应的索引 | | cancel | 点击取消按钮时触发 | 单列:选中值,选中值对应的索引<br>多列:所有列选中值,所有列选中值对应的索引 |
| change | 选项改变时触发 | 单列Picker 实例,选中值,选中值对应的索引<br>多列Picker 实例,所有列选中值,当前列对应的索引 | | change | 选项改变时触发 | 单列Picker 实例,选中值,选中值对应的索引<br>多列Picker 实例,所有列选中值,当前列对应的索引 |
### Slot
| 名称 | 说明 |
|------|------|
| title | 自定义标题内容 |
### Columns 数据结构 ### Columns 数据结构