Range区域选择

允许用户在一个区间中选择特定值,eg:控制屏幕的显示亮度。

规则

  • 默认状态下,左边为最小值,右边为最大值。
  • 一般水平放置。

Common API

参数说明类型默认值
[min]最小值number0
[max]最大值number100
[step]步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分number | null1
[value]设置当前取值Array<number>-
[defaultValue]设置初始取值Array<number>[0, 0]
[disabled]值为 true 时,滑块为禁用状态booleanfalse
[onChange]当 Slider 的值发生改变时,会触发 onChange 事件,并把改变后的值作为参数传入EventEmitter<Array<number>>-
[onAfterChange]ontouchend 触发时机一致,把当前值作为参数传入EventEmitter<Array<number>>-
[marks]刻度标记,key 的类型必须为 Number 且取值在闭区间 [min, max] 内{ [_: number]: string }{ }
[count]有几个区间块,比如有一个圆圈就是两个区间number1
[allowCross]是否允许两个handler(圆圈)互相穿越booleantrue
[pushable]两个触点之间的最小距离, 仅限allowCrossfalsenumber-
[handleStyle]滑块的样式,按数组顺序应用到多滑块Array<object>-
[trackStyle]选中部分滑动条的样式,按数组顺序应用到滑动条的多区间Array<object>-
[railStyle]未选中部分object-
[(ngModel)]当前取值number-
(ngModelChange)当 Slider 的值发生改变时,会触发 ngModelChange 事件,并把改变后的值作为参数传入EventEmitter<Array<number>>-

代码演示

基本用法

最简单的用法。

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'demo-range-basic',
  4. template: `
  5. <div class="am-demo-page">
  6. <div style="padding: 15px;font-size: 16px;">步骤条</div>
  7. <div class="am-demo-bd am-wingblank am-wingblank-lg">
  8. <div><div class="sub-title">Basic range ngModel</div></div>
  9. <div>
  10. <Range [ngModel]="valueModel" [min]="0" [max]="20" (ngModelChange)="changeModel($event)"> </Range>
  11. </div>
  12. </div>
  13. <div class="am-demo-bd am-wingblank am-wingblank-lg">
  14. <div><div class="sub-title">Basic range</div></div>
  15. <div>
  16. <Range
  17. [defaultValue]="[3, 10]"
  18. [min]="0"
  19. [max]="20"
  20. (onChange)="change($event)"
  21. (onAfterChange)="afterChange($event)"
  22. ></Range>
  23. </div>
  24. </div>
  25. <div class="am-demo-bd am-wingblank am-wingblank-lg">
  26. <div><div class="sub-title">Disabled range</div></div>
  27. <div>
  28. <Range
  29. [defaultValue]="[3, 10]"
  30. [min]="0"
  31. [max]="20"
  32. [disabled]="true"
  33. (onChange)="change($event)"
  34. (onAfterChange)="afterChange($event)"
  35. ></Range>
  36. </div>
  37. </div>
  38. <div class="am-demo-bd am-wingblank am-wingblank-lg">
  39. <div><div class="sub-title">Range with customized style</div></div>
  40. <div>
  41. <Range
  42. [defaultValue]="[3, 10]"
  43. [min]="0"
  44. [max]="20"
  45. [trackStyle]="trackStyle"
  46. [railStyle]="railStyle"
  47. [handleStyle]="handleStyle"
  48. (onChange)="change($event)"
  49. (onAfterChange)="afterChange($event)"
  50. ></Range>
  51. </div>
  52. </div>
  53. </div>
  54. `,
  55. styles: [
  56. `
  57. .am-wingblank,
  58. .am-wingblank-lg {
  59. margin-left: 15px;
  60. margin-right: 15px;
  61. margin-bottom: 30px;
  62. }
  63. .sub-title {
  64. color: #888;
  65. font-size: 14px;
  66. padding: 30px 0 18px 0;
  67. margin: 0;
  68. }
  69. `
  70. ]
  71. })
  72. export class DemoRangeBasicComponent {
  73. value = [20, 50];
  74. valueModel = [4, 8];
  75. trackStyle = [{ 'background-color': 'red' }, { 'background-color': 'green' }];
  76. railStyle = {
  77. 'background-color': 'black'
  78. };
  79. handleStyle = [{ 'background-color': 'yellow' }, { 'background-color': 'gray' }];
  80. constructor() {}
  81. change(e) {
  82. console.log(e, 'change');
  83. }
  84. afterChange(e) {
  85. console.log(e, 'afterChange');
  86. }
  87. changeModel(e) {
  88. console.log(e, 'changeModel');
  89. console.log(this.valueModel, 'valueModel');
  90. }
  91. }

Range区域选择 - 图1