Слайдер мата не работает должным образом с dir="rtl"

Я хочу создать сайт с поддержкой арабского языка в угловом материале, но когда я даю dir="rtl", у меня возникают проблемы с слайдером мата. когда я нажимаю на большой палец и перетаскиваю его, большой палец движется в обратном направлении.

Я попробовал решение ниже, но оно показывает ошибку: «Невозможно привязаться к «ngModel», поскольку это не известное свойство «mat-slider».

ниже приведен мой пример stackblitz. https://stackblitz.com/edit/45m3gu-suzg2w?file=src%2Fexample%2Fslider-range-example.html

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

По направлению CSS статья :

Там, где это возможно, авторам рекомендуется избегать использования направления CSS и вместо этого используйте глобальный атрибут HTML dir.

Если вы напишете <body dir = "rtl"> и удалите направление в CSS для тела и слайдера, слайдер будет работать.

Также вы неправильно используете ngModel. Смотрите пример коврика-слайдера .

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

Kinjan Koradiya 28.06.2024 14:24

Вот stackblitz.

Tortila 28.06.2024 15:34

Та же проблема возникает и с ltr, когда вы удаляете dir = "rtl".

Kinjan Koradiya 01.07.2024 07:04

Я не понимаю, в чем проблема. При использовании rtl 100 должно быть слева, а 0 — справа, не так ли?

Tortila 01.07.2024 17:50

Да, верно, но когда мы удаляем rtl, это вызывает проблемы с поддержкой ltr. это должно работать как с rtl, так и с ltr.

Kinjan Koradiya 02.07.2024 07:06

Вы смотрели мой stackblitz? Все то же самое, что и раньше, для ясности я добавил к ползунку дискретный атрибут для метки ползунка и изменил значение по умолчанию со 100 на 20. С dir = "rtl" ползунок перемещается справа налево, с dir = "ltr" или без dir он движется слева направо. . Так в чем проблема? Не могли бы вы уточнить?

Tortila 02.07.2024 12:43
Awesomescreenshot.com/video/… Пожалуйста, посмотрите это видео. Я просто удаляю dir = "rtl" из проверки.
Kinjan Koradiya 02.07.2024 14:12

Думаю, коврик-слайдер что-то делает под капотом, когда присутствует dir = "rtl". Поэтому удаление его в Inspect может работать неправильно. Если вы измените код в самом stackblitz и обновите его, он будет работать, потому что это всего лишь базовый слайдер.

Tortila 03.07.2024 06:44

Да, нам нужно обновить страницу. Мне нужно решение без обновления, оно должно работать.

Kinjan Koradiya 03.07.2024 09:17

Теперь я понимаю. Я считаю, что он каким-то образом поддерживается (см. это и это), но, честно говоря, я все еще пытаюсь заставить его работать должным образом.

Tortila 03.07.2024 14:29
Ответ принят как подходящий

Попробуйте просто повернуть ползунок на 180 градусов, тогда нам нужно добавить ngModel на уровне большого пальца, а не на уровне ползунка коврика.

Глобальный стиль:

mat-slider.reverse-slider {
  transform: rotateY(180deg);
}

HTML:

<mat-slider class = "reverse-slider">
  <input
    matSliderThumb
    [(ngModel)] = "sliderValue"
    [min] = "minValue"
    [max] = "maxValue"
    [step] = "stepValue"
  />
</mat-slider>
<p>Current Value: {{ sliderValue }}</p>

ТС:

import { Component } from '@angular/core';
import { MatSliderModule } from '@angular/material/slider';
import { FormsModule } from '@angular/forms';

/**
 * @title Basic slider
 */
@Component({
  selector: 'slider-overview-example',
  templateUrl: 'slider-overview-example.html',
  styleUrl: 'slider-overview-example.css',
  standalone: true,
  imports: [MatSliderModule, FormsModule],
})
export class SliderOverviewExample {
  minValue: number = 0;
  maxValue: number = 100;
  stepValue: number = 1;
  sliderValue: number = this.maxValue;
}

Демо-версия Stackblitz

-1. Это не так должно работать. Вы вообще не используете rtl, вот в чем вопрос. И у вас возникнут проблемы, если вы попытаетесь добавить метку большого пальца.

Tortila 28.06.2024 15:28

Другие вопросы по теме