• Slider滑动输入条
    • 何时使用
    • 单独引入此组件
    • 代码演示
    • API
      • nz-slidercomponent

    Slider滑动输入条

    滑动型输入器,展示当前值和可选范围。

    何时使用

    当用户需要在数值区间/自定义区间内进行选择时,可为连续或离散值。

    单独引入此组件

    想要了解更多关于单独引入组件的内容,可以在快速上手页面进行查看。

    1. import { NzSliderModule } from 'ng-zorro-antd/slider';

    代码演示

    Slider滑动输入条 - 图1

    基本

    基本滑动条。当 nzRangetrue 时,渲染为双滑块。当 nzDisabledtrue 时,滑块处于不可用状态。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-basic',
    4. template: `
    5. <nz-slider [(ngModel)]="value1" [nzDisabled]="disabled"></nz-slider>
    6. <nz-slider nzRange [(ngModel)]="value2" [nzDisabled]="disabled"></nz-slider>
    7. Disabled:
    8. <nz-switch nzSize="small" [(ngModel)]="disabled"></nz-switch>
    9. `
    10. })
    11. export class NzDemoSliderBasicComponent {
    12. disabled = false;
    13. value1 = 30;
    14. value2 = [20, 50];
    15. }

    Slider滑动输入条 - 图2

    带 icon 的滑块

    滑块左右可以设置图标来表达业务含义。

    1. import { Component, OnInit } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-icon-slider',
    4. template: `
    5. <div class="icon-wrapper test-class">
    6. <i nz-icon nzType="frown" [class.icon-highlight]="preHighLight"></i>
    7. <nz-slider [nzMin]="0" [nzMax]="20" [(ngModel)]="sliderValue"></nz-slider>
    8. <i nz-icon nzType="smile" [class.icon-highlight]="nextHighLight"></i>
    9. </div>
    10. `,
    11. styles: [
    12. `
    13. .icon-wrapper {
    14. position: relative;
    15. padding: 0px 30px;
    16. }
    17. [nz-icon] {
    18. position: absolute;
    19. top: -2px;
    20. width: 16px;
    21. height: 16px;
    22. line-height: 1;
    23. font-size: 16px;
    24. color: rgba(0, 0, 0, 0.25);
    25. }
    26. [nz-icon]:first-child {
    27. left: 0;
    28. }
    29. [nz-icon]:last-child {
    30. right: 0;
    31. }
    32. .icon-highlight {
    33. color: rgba(0, 0, 0, 0.45);
    34. }
    35. `
    36. ]
    37. })
    38. export class NzDemoSliderIconSliderComponent implements OnInit {
    39. min = 0;
    40. max = 20;
    41. mid = parseFloat(((this.max - this.min) / 2).toFixed(5));
    42. preHighLight = false;
    43. nextHighLight = false;
    44. _sliderValue = 0;
    45. set sliderValue(value: number) {
    46. this._sliderValue = value;
    47. this.highlightIcon();
    48. }
    49. get sliderValue(): number {
    50. return this._sliderValue;
    51. }
    52. ngOnInit(): void {
    53. this.sliderValue = 0;
    54. }
    55. highlightIcon() {
    56. const lower = this._sliderValue >= this.mid;
    57. this.preHighLight = !lower;
    58. this.nextHighLight = lower;
    59. }
    60. }

    Slider滑动输入条 - 图3

    事件

    当 Slider 的值发生改变时,会触发 nzOnChange 事件,并把改变后的值作为参数传入。在 onmouseup 时,会触发 nzOnAfterChange 事件,并把当前值作为参数传入。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-event',
    4. template: `
    5. <nz-slider
    6. [(ngModel)]="singleValue"
    7. (ngModelChange)="onChange($event)"
    8. (nzOnAfterChange)="onAfterChange($event)"
    9. ></nz-slider>
    10. <nz-slider
    11. nzRange
    12. [nzStep]="10"
    13. [(ngModel)]="rangeValue"
    14. (ngModelChange)="onChange($event)"
    15. (nzOnAfterChange)="onAfterChange($event)"
    16. ></nz-slider>
    17. `
    18. })
    19. export class NzDemoSliderEventComponent {
    20. singleValue = 30;
    21. rangeValue = [20, 50];
    22. onChange(value: number): void {
    23. console.log(`onChange: ${value}`);
    24. }
    25. onAfterChange(value: number): void {
    26. console.log(`onAfterChange: ${value}`);
    27. }
    28. }

    Slider滑动输入条 - 图4

    垂直

    垂直方向的 Slider。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-vertical',
    4. template: `
    5. <div [ngStyle]="{ height: '300px' }">
    6. <div [ngStyle]="style">
    7. <nz-slider nzVertical [ngModel]="30"></nz-slider>
    8. </div>
    9. <div [ngStyle]="style">
    10. <nz-slider nzVertical nzRange [nzStep]="10" [ngModel]="[20, 50]"></nz-slider>
    11. </div>
    12. <div [ngStyle]="style">
    13. <nz-slider nzVertical nzRange [nzMarks]="marks" [ngModel]="[26, 37]"></nz-slider>
    14. </div>
    15. </div>
    16. `
    17. })
    18. export class NzDemoSliderVerticalComponent {
    19. style = {
    20. float: 'left',
    21. height: '300px',
    22. marginLeft: '70px'
    23. };
    24. marks = {
    25. 0: '0°C',
    26. 26: '26°C',
    27. 37: '37°C',
    28. 100: {
    29. style: {
    30. color: '#f50'
    31. },
    32. label: '<strong>100°C</strong>'
    33. }
    34. };
    35. }

    Slider滑动输入条 - 图5

    带输入框的滑块

    和 数字输入框 组件保持同步。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-input-number',
    4. template: `
    5. <nz-row>
    6. <nz-col nzSpan="12">
    7. <nz-slider [nzMin]="1" [nzMax]="20" [(ngModel)]="value1"></nz-slider>
    8. </nz-col>
    9. <div nz-col nzSpan="4">
    10. <nz-input-number
    11. [nzMin]="1"
    12. [nzMax]="20"
    13. [ngStyle]="{ marginLeft: '16px' }"
    14. [(ngModel)]="value1"
    15. ></nz-input-number>
    16. </div>
    17. </nz-row>
    18. <nz-row>
    19. <nz-col nzSpan="12">
    20. <nz-slider [nzMin]="0" [nzMax]="1" [nzStep]="0.01" [(ngModel)]="value2"></nz-slider>
    21. </nz-col>
    22. <nz-col nzSpan="4">
    23. <nz-input-number
    24. [nzMin]="0"
    25. [nzMax]="1"
    26. [ngStyle]="{ marginLeft: '16px' }"
    27. [nzStep]="0.01"
    28. [(ngModel)]="value2"
    29. ></nz-input-number>
    30. </nz-col>
    31. </nz-row>
    32. `
    33. })
    34. export class NzDemoSliderInputNumberComponent {
    35. value1 = 1;
    36. value2 = 0;
    37. }

    Slider滑动输入条 - 图6

    自定义提示

    使用 nzTipFormatter 可以格式化 Tooltip 的内容,设置 nzTipFormatter = null,则隐藏 Tooltip

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-tip-formatter',
    4. template: `
    5. <nz-slider [nzTipFormatter]="formatter"></nz-slider>
    6. <nz-slider [nzTipFormatter]="null"></nz-slider>
    7. `
    8. })
    9. export class NzDemoSliderTipFormatterComponent {
    10. formatter(value: number): string {
    11. return `${value}%`;
    12. }
    13. }

    Slider滑动输入条 - 图7

    带标签的滑块

    使用 nzMarks 属性标注分段式滑块,使用 ngModel 指定滑块位置。当 nzIncluded = false 时,表明不同标记间为并列关系。当 nzStep = null 时,Slider 的可选值仅有 nzMarks 标出来的部分。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-mark',
    4. template: `
    5. <div>
    6. <h4>included=true</h4>
    7. <nz-slider [nzMarks]="marks" [ngModel]="37"></nz-slider>
    8. <nz-slider [nzMarks]="marks" nzIncluded nzRange [ngModel]="[26, 37]"></nz-slider>
    9. <h4>included=false</h4>
    10. <nz-slider [nzMarks]="marks" [nzIncluded]="false" [ngModel]="37"></nz-slider>
    11. <h4>marks & step</h4>
    12. <nz-slider [nzMarks]="marks" [nzStep]="10" [ngModel]="37"></nz-slider>
    13. <h4>step=null || dots=true</h4>
    14. <nz-slider [nzMarks]="marks" [nzStep]="null" [ngModel]="37"></nz-slider>
    15. <nz-slider [nzMarks]="marks" nzDots [ngModel]="37"></nz-slider>
    16. Change nzMarks dynamically: <button nz-button (click)="changeMarks()">Change nzMarks</button>
    17. </div>
    18. `,
    19. styles: [
    20. `
    21. h4 {
    22. margin: 0 0 16px;
    23. }
    24. .ant-slider-with-marks {
    25. margin-bottom: 44px;
    26. }
    27. `
    28. ]
    29. })
    30. export class NzDemoSliderMarkComponent {
    31. marks: any = {
    32. 0: '0°C',
    33. 26: '26°C',
    34. 37: '37°C',
    35. 100: {
    36. style: {
    37. color: '#f50'
    38. },
    39. label: '<strong>100°C</strong>'
    40. }
    41. };
    42. changeMarks() {
    43. this.marks = {
    44. 20: '20%',
    45. 99: '99%'
    46. };
    47. }
    48. }

    Slider滑动输入条 - 图8

    控制 Tooltip 的显示

    nzTooltipVisiblealways 时,将始终显示 ToolTip,为 never 时反之则始终不显示,即使在拖动、移入时也是如此。

    1. import { Component } from '@angular/core';
    2. @Component({
    3. selector: 'nz-demo-slider-tooltip',
    4. template: `
    5. <nz-slider [nzTooltipVisible]="'always'"></nz-slider>
    6. <nz-slider [nzTooltipVisible]="'never'"></nz-slider>
    7. `
    8. })
    9. export class NzDemoSliderTooltipComponent {}

    API

    nz-slidercomponent

    参数说明类型默认值
    [nzDisabled]值为 true 时,滑块为禁用状态booleanfalse
    [nzDots]是否只能拖拽到刻度上booleanfalse
    [nzIncluded]marks 不为空对象时有效,值为 true 时表示值为包含关系,false 表示并列booleantrue
    [nzMarks]刻度标记,key 的类型必须为 number 且取值在闭区间 [min, max] 内,每个标签可以单独设置样式object{ number: string/HTML } or { number: { style: object, label: string/HTML } }
    [nzMax]最大值number100
    [nzMin]最小值number0
    [nzRange]双滑块模式booleanfalse
    [nzStep]步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分。number | null1
    [nzTipFormatter]Slider 会把当前值传给 nzTipFormatter,并在 Tooltip 中显示 nzTipFormatter 的返回值,若为 null,则隐藏 Tooltip。(value: number) => string-
    [ngModel]设置当前取值。当 rangefalse 时,使用 number,否则用 [number, number]number | number[]-
    [nzVertical]值为 true 时,Slider 为垂直方向booleanfalse
    [nzTooltipVisible]值为 always 时总是显示,值为 never 时在任何情况下都不显示'default' | 'always' | 'never'default
    (nzOnAfterChange)onmouseup 触发时机一致,把当前值作为参数传入。EventEmitter<number[] | number>-
    (ngModelChange)当 Slider 的值发生改变时,会触发 ngModelChange 事件,并把改变后的值作为参数传入。EventEmitter<number[] | number>>-