Slider: feature - add format-tooltip prop (#3657)

* Slider: add format-tooltip prop

* Docs: update slider.md

* Docs: update slider.md
pull/3984/head
liyl 2017-04-04 15:40:39 +08:00 committed by 杨奕
parent f9d8a0e03f
commit 6afa2ba690
5 changed files with 97 additions and 28 deletions

View File

@ -5,12 +5,18 @@
value1: 0, value1: 0,
value2: 50, value2: 50,
value3: 36, value3: 36,
value4: 42, value4: 48,
value5: 0, value5: 42,
value6: 0, value6: 0,
value7: 0, value7: 0,
value8: [4, 8] value8: 0,
value9: [4, 8]
}; };
},
methods: {
formatTooltip(val) {
return val / 100;
}
} }
} }
</script> </script>
@ -39,9 +45,13 @@ The current value is displayed when the slider is being dragged.
<span class="demonstration">Hide Tooltip</span> <span class="demonstration">Hide Tooltip</span>
<el-slider v-model="value3" :show-tooltip="false"></el-slider> <el-slider v-model="value3" :show-tooltip="false"></el-slider>
</div> </div>
<div class="block">
<span class="demonstration">Format Tooltip</span>
<el-slider v-model="value4" :format-tooltip="formatTooltip"></el-slider>
</div>
<div class="block"> <div class="block">
<span class="demonstration">Disabled</span> <span class="demonstration">Disabled</span>
<el-slider v-model="value4" disabled></el-slider> <el-slider v-model="value5" disabled></el-slider>
</div> </div>
</template> </template>
@ -52,7 +62,13 @@ The current value is displayed when the slider is being dragged.
value1: 0, value1: 0,
value2: 50, value2: 50,
value3: 36, value3: 36,
value4: 42 value4: 48,
value5: 42
}
},
methods: {
formatTooltip(val) {
return val / 100;
} }
} }
} }
@ -71,14 +87,14 @@ The options can be discrete.
<div class="block"> <div class="block">
<span class="demonstration">Breakpoints not displayed</span> <span class="demonstration">Breakpoints not displayed</span>
<el-slider <el-slider
v-model="value5" v-model="value6"
:step="10"> :step="10">
</el-slider> </el-slider>
</div> </div>
<div class="block"> <div class="block">
<span class="demonstration">Breakpoints displayed</span> <span class="demonstration">Breakpoints displayed</span>
<el-slider <el-slider
v-model="value6" v-model="value7"
:step="10" :step="10"
show-stops> show-stops>
</el-slider> </el-slider>
@ -89,8 +105,8 @@ The options can be discrete.
export default { export default {
data() { data() {
return { return {
value5: 0, value6: 0,
value6: 0 value7: 0
} }
} }
} }
@ -108,7 +124,7 @@ Set value via a input box.
<template> <template>
<div class="block"> <div class="block">
<el-slider <el-slider
v-model="value7" v-model="value8"
show-input> show-input>
</el-slider> </el-slider>
</div> </div>
@ -118,7 +134,7 @@ Set value via a input box.
export default { export default {
data() { data() {
return { return {
value7: 0 value8: 0
} }
} }
} }
@ -135,7 +151,7 @@ Selecting a range of values is supported.
<template> <template>
<div class="block"> <div class="block">
<el-slider <el-slider
v-model="value8" v-model="value9"
range range
show-stops show-stops
:max="10"> :max="10">
@ -147,7 +163,7 @@ Selecting a range of values is supported.
export default { export default {
data() { data() {
return { return {
value8: [4, 8] value9: [4, 8]
} }
} }
} }
@ -166,6 +182,7 @@ Selecting a range of values is supported.
| show-input-controls | whether to display control buttons when `show-input` is true | boolean | — | true | | show-input-controls | whether to display control buttons when `show-input` is true | boolean | — | true |
| show-stops | whether to display breakpoints | boolean | — | false | | show-stops | whether to display breakpoints | boolean | — | false |
| show-tooltip | whether to display tooltip value | boolean | — | true | | show-tooltip | whether to display tooltip value | boolean | — | true |
| format-tooltip | format to display tooltip value | Function(value) | — | — |
| range | whether to select a range | boolean | — | false | | range | whether to select a range | boolean | — | false |
## Events ## Events

View File

@ -5,12 +5,18 @@
value1: 0, value1: 0,
value2: 50, value2: 50,
value3: 36, value3: 36,
value4: 42, value4: 48,
value5: 0, value5: 42,
value6: 0, value6: 0,
value7: 0, value7: 0,
value8: [4, 8] value8: 0,
value9: [4, 8]
}; };
},
methods: {
formatTooltip(val) {
return val / 100;
}
} }
} }
</script> </script>
@ -65,9 +71,13 @@
<span class="demonstration">隐藏 Tooltip</span> <span class="demonstration">隐藏 Tooltip</span>
<el-slider v-model="value3" :show-tooltip="false"></el-slider> <el-slider v-model="value3" :show-tooltip="false"></el-slider>
</div> </div>
<div class="block">
<span class="demonstration">格式化 Tooltip</span>
<el-slider v-model="value4" :format-tooltip="formatTooltip"></el-slider>
</div>
<div class="block"> <div class="block">
<span class="demonstration">禁用</span> <span class="demonstration">禁用</span>
<el-slider v-model="value4" disabled></el-slider> <el-slider v-model="value5" disabled></el-slider>
</div> </div>
</template> </template>
@ -78,7 +88,13 @@
value1: 0, value1: 0,
value2: 50, value2: 50,
value3: 36, value3: 36,
value4: 42 value4: 48,
value5: 42
}
},
methods: {
formatTooltip(val) {
return val / 100;
} }
} }
} }
@ -96,14 +112,14 @@
<div class="block"> <div class="block">
<span class="demonstration">不显示间断点</span> <span class="demonstration">不显示间断点</span>
<el-slider <el-slider
v-model="value5" v-model="value6"
:step="10"> :step="10">
</el-slider> </el-slider>
</div> </div>
<div class="block"> <div class="block">
<span class="demonstration">显示间断点</span> <span class="demonstration">显示间断点</span>
<el-slider <el-slider
v-model="value6" v-model="value7"
:step="10" :step="10"
show-stops> show-stops>
</el-slider> </el-slider>
@ -114,8 +130,8 @@
export default { export default {
data() { data() {
return { return {
value5: 0, value6: 0,
value6: 0 value7: 0
} }
} }
} }
@ -132,7 +148,7 @@
<template> <template>
<div class="block"> <div class="block">
<el-slider <el-slider
v-model="value7" v-model="value8"
show-input> show-input>
</el-slider> </el-slider>
</div> </div>
@ -142,7 +158,7 @@
export default { export default {
data() { data() {
return { return {
value7: 0 value8: 0
} }
} }
} }
@ -159,7 +175,7 @@
<template> <template>
<div class="block"> <div class="block">
<el-slider <el-slider
v-model="value8" v-model="value9"
range range
show-stops show-stops
:max="10"> :max="10">
@ -171,7 +187,7 @@
export default { export default {
data() { data() {
return { return {
value8: [4, 8] value9: [4, 8]
} }
} }
} }
@ -190,6 +206,7 @@
| show-input-controls | 在显示输入框的情况下,是否显示输入框的控制按钮 | boolean | — | true| | show-input-controls | 在显示输入框的情况下,是否显示输入框的控制按钮 | boolean | — | true|
| show-stops | 是否显示间断点 | boolean | — | false | | show-stops | 是否显示间断点 | boolean | — | false |
| show-tooltip | 是否显示 tooltip | boolean | — | true | | show-tooltip | 是否显示 tooltip | boolean | — | true |
| format-tooltip | 格式化 tooltip message | Function(value) | — | — |
| range | 是否为范围选择 | boolean | — | false | | range | 是否为范围选择 | boolean | — | false |
### Events ### Events

View File

@ -8,7 +8,7 @@
:style="{ left: currentPosition }" :style="{ left: currentPosition }"
ref="button"> ref="button">
<el-tooltip placement="top" ref="tooltip" :disabled="!showTooltip"> <el-tooltip placement="top" ref="tooltip" :disabled="!showTooltip">
<span slot="content">{{ value }}</span> <span slot="content">{{ formatValue }}</span>
<div class="el-slider__button" :class="{ 'hover': hovering, 'dragging': dragging }"></div> <div class="el-slider__button" :class="{ 'hover': hovering, 'dragging': dragging }"></div>
</el-tooltip> </el-tooltip>
</div> </div>
@ -70,6 +70,14 @@
currentPosition() { currentPosition() {
return `${ (this.value - this.min) / (this.max - this.min) * 100 }%`; return `${ (this.value - this.min) / (this.max - this.min) * 100 }%`;
},
enableFormat() {
return this.$parent.formatTooltip instanceof Function;
},
formatValue() {
return this.enableFormat && this.$parent.formatTooltip(this.value) || this.value;
} }
}, },
@ -159,4 +167,3 @@
} }
}; };
</script> </script>

View File

@ -83,6 +83,7 @@
type: Boolean, type: Boolean,
default: true default: true
}, },
formatTooltip: Function,
disabled: { disabled: {
type: Boolean, type: Boolean,
default: false default: false

View File

@ -81,6 +81,33 @@ describe('Slider', () => {
expect(slider.$refs.tooltip.disabled).to.true; expect(slider.$refs.tooltip.disabled).to.true;
}); });
it('format tooltip', () => {
vm = createVue({
template: `
<div>
<el-slider v-model="value" :format-tooltip="formatTooltip">
</el-slider>
</div>
`,
data() {
return {
value: 0
};
},
methods: {
formatTooltip(val) {
return '$' + val;
}
}
}, true);
const slider = vm.$children[0].$children[0];
expect(slider.formatTooltip).to.function;
vm.$nextTick(() => {
expect(slider.formatValue).to.equal('$0');
});
});
it('drag', done => { it('drag', done => {
vm = createVue({ vm = createVue({
template: ` template: `