ng5-ползунок изменяет минимальное и максимальное значения в зависимости от условий

#angular #angular9

Вопрос:

Я использовал ng5-слайдер для отображения диапазона опций на своем веб-сайте. У меня есть одна проблема с этим. Который

введите описание изображения здесь

значение по умолчанию — «Любое». Требование, которое я предъявляю, заключается в том, что при нажатии от 1 до 5 опция «Любой» не должна включаться в выбранный диапазон.

Например, когда вы нажимаете 3, он должен отображаться только или отмечаться от 1 до 3, но в данный момент он будет отмечаться полностью от любого до 3. Если вы выберете опцию «Любой», он не должен указывать диапазон, а только этот параметр.

Текущее поведение

введите описание изображения здесь

Ожидаемое поведение

введите описание изображения здесь

стакбиц : https://stackblitz.com/edit/ng5-slider-range-slider-example-wa1szn?file=src/app/app.component.ts

Мне нужна идея вашего эксперта.

Комментарии:

1. Можете ли вы создать стекблитц?

2. Спасибо вам за ответ.. @DrashtiDobariya Я обновил вопрос ссылкой.

Ответ №1:

Для того, чтобы вы могли изменить минимальное значение вашего слайдера, вам необходимо использовать userChange событие в вашем html. Затем в вашем методе userChange вам нужно изменить value переменную с 0 на 1, чтобы можно было переместить минимальный ползунок на 1 из ЛЮБОГО.

Я изменил созданный вами стекблитц, чтобы показать свое решение.

HTML — Я добавил функцию привязки событий ng5-слайдера userChange для обнаружения любых изменений на слайдере. Для получения дополнительной информации о событиях ng5-слайдера, пожалуйста, прочитайте здесь.

 <ng5-slider [(value)]="value" [(highValue)]="highValue" [options]="options" (userChange)="getEvent($event)"></ng5-slider>
 

TS — Я создал getEvent функцию, чтобы получить текущее высокое значение ползунка ng5, а затем изменить value переменную на 1, если значение highValue больше 0.

 import {
  Component
} from '@angular/core';
import {
  ChangeContext,
  Options
} from 'ng5-slider';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {
  value: number = 0;
  highValue: number = 0;
  options: Options = {
    floor: 0,
    ceil: 5,
    translate: (value: number): string => {
      if (value === 5) {
        return '5 ';
      }
      if (value === 0) {
        return 'Any';
      }
      return `${value}`;
    },
    combineLabels: (minValue: string, maxValue: string): string => {
      if (minValue === 'Any' amp;amp; maxValue === 'Any') return minValue;
      if (minValue === '5 ' amp;amp; maxValue === '5 ') return maxValue;
      if (minValue === maxValue) return minValue;
      else return minValue   ' - '   maxValue;
    },
  };

  constructor() {}

  getEvent(e: ChangeContext) {
    if (e.highValue > 0) {
      this.value = 1;
    }
  }
}
 

Комментарии:

1. спасибо вам за ваш вклад. Но это работает только для первого пользователя, который меняет только ползунок. но для более поздних взаимодействий это не сработает. Например, если я перемещу ползунок на 3 в первый раз, он переместит нижнюю точку на 1. но если я вернусь к опции «Любой» и переместю указатель с 3 на 4, он будет находиться в положении «Любой».

2. Похоже, в их github есть открытый билет по этому вопросу. Проблема заключается в том, что представление не обновляется при обновлении значения в файле TS. github.com/angular-slider/ngx-slider/issues/267

3. Спасибо за ввод @dom.mac, я также буду отслеживать билет и обновлять, если потребуются какие-либо изменения.