[ВАЖНО - Читай описание] Vue.js. Фильтрация товаров по цене через ползунки (range slider)

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ก.ย. 2024
  • --------------------------------------------------------------------------------------------------------------------------------------------------------
    ВАЖНО - Видео на этом канале 3х летней давности и большинство уже НЕАКТУАЛЬНЫЕ в силу изменения синтаксиса, методов и подходов во Vue.js версии 3. Все видео были записаны на Vue.js версии 2. Много чего уже просто НЕ БУДЕТ РАБОТАТЬ или выдаст ошибки.
    Новый канал на актуальном стеке Vue.js v3, Pinia, Vue router@next, Ionic (мобильные приложения), FireBase (база данных, аутентификация и тд) - / @intothecoding
    НО! Новый канал ведется на АНГЛИЙСКОМ ЯЗЫКЕ - так что у вас есть уникальная возможность научиться кодить и подтянуть язык - так как Английский нужен всегда!
    Жду вас на новом канале!
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    В этом видео создадим фильтрацию товаров в каталоге, используя input type="range" или "ползунки"
    Урок по select'у: • [ВАЖНО - Читай описани...
    Создание интернет-магазина на Vue: • [ВАЖНО - Читай описани...
    Приятного просмотра! Не забудьте подписаться :)

ความคิดเห็น • 32

  • @Dreadlight92
    @Dreadlight92 3 ปีที่แล้ว

    Пару моментов использовал в ангуляре.Большое спс!!!

  • @ВиталийНикишин-н7у
    @ВиталийНикишин-н7у 4 ปีที่แล้ว +6

    Спасибо за урок, в конце маленькая опечатка по сортировке выбранной категории, фильтрация происходит а текст в поле не меняется, this.selected = category.name;

  • @vitiok78
    @vitiok78 4 ปีที่แล้ว +2

    Спасибо за отличные видео!
    Т.к. это формат видеоуроков, то советую сразу приучать народ к использованию prettier, и он сам будет подсказывать как красиво оформлять код при разработке.

    • @gofrontend2220
      @gofrontend2220  4 ปีที่แล้ว +2

      Victor Cozhuhari спасибо:) у меня просто в ide по умолчанию комбинация ctrl+alt+L форматирует код по красоте. Но вы правы. Я пожалуй сделаю урок по настройке рабочего окружения.

    • @vitiok78
      @vitiok78 4 ปีที่แล้ว +1

      @@gofrontend2220 Я просто помню, какой говнокод я писал без prettier, и потом даже самому было тяжело в этом разбираться. И помню, как меня prettier раздражал первое время. Хотелось снести его и забыть как страшный сон. Но потом начинаешь понимать, что это очень полезный инструмент, когда код разрастается. Это как гигиена - кажется ребенку ненужной, излишней и раздражающей до первого пищевого отравления )))

    • @gofrontend2220
      @gofrontend2220  4 ปีที่แล้ว +1

      Victor Cozhuhari учту спасибо за совет:) главное потом без всех этих плагинов тоже не начать говнокодить:) ведь уже никто не поправит)

    • @vitiok78
      @vitiok78 4 ปีที่แล้ว +1

      @@gofrontend2220 Согласен, но привыкнув к тому виду кода, который генерируют эти плагины, потом сам автоматом будешь придерживаться этого стиля. А вот в самом начале пути программиста даже и не подозреваешь о существовании этих стандартов, пишешь как придётся, а тут тебе сразу показывают, как лучше, и ты такой: "О! Точно! А я не догадался!"

    • @gofrontend2220
      @gofrontend2220  4 ปีที่แล้ว +2

      Victor Cozhuhari согласен:)

  • @gofrontend2220
    @gofrontend2220  ปีที่แล้ว

    ! ВАЖНО - Читайте описание к видео ! 🔥🔥🔥👆👆👆

  • @GeliosGarik
    @GeliosGarik 4 ปีที่แล้ว +1

    в общем понятно, спасибо!
    хотелось бы сделать не пересекающиеся ползунки, получилось так _@mousemove="doNotCrosRange"_
    _doNotCrosRange() {
    if(this.minPrice + this.step >= this.maxPrice) {
    //шаг вынесен в data()
    let tmpMin = this.minPrice;
    let tmpMax = this.maxPrice;

    this.maxPrice = tmpMin + this.step
    //в атрибутах уже учтён этот шаг, чтобы не уйти за границу max и не спуститься в минус
    this.minPrice = tmpMax - this.step
    }
    }_ но они толкают друг друга, а если передавать им max и min то сам range начинает гулять. Как блокировать движение ползунка, если другим уже определена граница?

  • @АннаЛупанова-ы2ь
    @АннаЛупанова-ы2ь 3 ปีที่แล้ว +1

    Здравствуйте. А есть ли информация,как сделать фильтр по checkbox?

  • @alexanderxp2804
    @alexanderxp2804 4 ปีที่แล้ว +1

    Спасибо большое за урок. Почти все работает. Только еще нашел в конце урока, что в select так и остается он на 'Все' и не меняется при выборе на 'мужские ' или 'женские' (то есть фильтрация на мужские и женские работает, товары фильтруются, но сам select остается в положении 'Все'). Казалось бы это должна была решить строка vm.selected === category.name , которая добавлялась после 11:30 на временной шкале, но нет, все равно не работало. Перелопатил весь код в этом файле, все запятые скобки и т.д, - ничего. Потом когда вернулся к тому моменту, когда мы удаляли все данные из функции sortByCategories() заметил, что мы в той предыдущей версии функции писали this.selected = category.name (c обычным присваиванием ''=' а не через строгое равенство '==='). И таким образом заменив на 12й минуте строку vm.selected === category.name на строку vm.selected = category.name у меня select начал переключать на "мужские" и "женские " значения. @UC-NllVkhmcweguxSKzb7Y3g тоже об этом написал в коментах, но он не уточнил, что нужно написать именно vm.selected = category.name. И того вся рабочая функция выглядит вот так:
    sortByCategories(category){
    let vm = this;
    this.sortedProducts = [...this.PRODUCTS]
    this.sortedProducts = this.sortedProducts.filter(function(item){
    return item.price >= vm.minPrice && item.price

    • @gofrontend2220
      @gofrontend2220  4 ปีที่แล้ว +1

      ALEXANDERXP спасибо за комментарий:) все верно, упустил этот момент

    • @amikawa2881
      @amikawa2881 4 ปีที่แล้ว

      Господи, чел, какой же ты зануда, прости)
      Чел сверху написал достаточно, чтобы понимающий чел в полвзгляда понял, о чём речь.
      А ты написал для людей копирайтеров, которые вообще не в курсе, что происходит)
      Конечно, лучше твой комментарий, чем без него, тк, наверное есть люди, кто без понятия смысла это смотрят, но всё же...)

  • @GeliosGarik
    @GeliosGarik 4 ปีที่แล้ว +1

    получается, что мы сначала должны отфильтровать по цене, а потом по категории и если снова двинем ползунок он нам отфильтрует опять по всем категориям, а не по той которую уже выбрали. Хотелось бы с фильтрами разобраться подробнее, чтобы можно было добавлять их разное количество и они на ходу работали учитывая выбор в других инпутах. Можно видео или ссылку или что искать?

    • @gofrontend2220
      @gofrontend2220  4 ปีที่แล้ว +1

      Garik Gelios да возможно какие-то моменты я не учел. Категории видимо меняют исходные данные. Надо из тоже подвязать на отфильтрованные

    • @alexanderxp2804
      @alexanderxp2804 4 ปีที่แล้ว

      Да, тоже заметил. Сначала фильтрует по цене, потом по категории. Если фильтровать по категории а потом по цене - все сбивается

    • @МарияДроздова-п1э
      @МарияДроздова-п1э 4 ปีที่แล้ว

      @@gofrontend2220 а вы не могли бы записать дополнительное видео и прояснить этот момент?

    • @ВладимирГолубов-ь4д
      @ВладимирГолубов-ь4д 3 ปีที่แล้ว

      Может кому поможет. Кажется рабочий вариант. Все изменения нужно сделать в v-catalog.vue.
      Меняем соответствующий код из урока на:
      1) filteredProducts() {
      if (this.sortedProducts.length) {
      return this.sortedProducts
      }
      else {
      return []
      }
      }
      2) sortByCategories(category) {
      this.sortedProducts = [...this.PRODUCTS];
      if(category) {
      this.selected = category.name;
      }
      this.sortedProducts = this.sortedProducts.filter(item => {
      return item.price >= this.minPrice && item.price {
      return product.category === this.selected;
      })
      }
      }
      Если код всё-таки не рабочий, скажите об этом пожалуйста!

  • @АлександрБорюшин
    @АлександрБорюшин 4 ปีที่แล้ว +1

    (на 3й минуте 48 секунд) На Windows данные стили так не работают, ползунки налазят прямо на select (на выпадающий список выбора мужских и женских товаров.) И добавление стилей для фильтров .filters {display: flex; justify-content: space-between; align-items: center; } вообще никак не помогают и абсолютно ничего не меняют. Пробовал в разных браузерах: Opera, Chromium и даже IE11 - никакой разницы. Копировал стили напрямую с вашего github с файла v-catalog.vue - тоже без результатов.
    То есть при добавлении этих стилей вообще ползунки остаются квадратными (а не круглыми как в видео), не добавляются тени. А единственное, что меняется, это что ползунки перемещаются один под другим и начинают налазить прямо на выпадающее меню select. ( это происходит только при добавлении стилей, если их не добавлять, то не налазит ). Проблему решил использованием других стилей. Подробно описал их в ответах ниже

    • @АлександрБорюшин
      @АлександрБорюшин 4 ปีที่แล้ว +1

      1. (читать по пунктам 1.2.3.)Как мне удалось узнать, данная стилизация ползунка из видео присуща именно в Mac Chrome 38 (и думаю более поздних версиях). Чтобы нормально работали стили в Windows достаточно написать следующие (но ползунок и полоска будет стилизована по стандартам Windows) :
      .range-slider input[type=range] {
      position: absolute;
      left: 65%;
      top: 180px;
      }
      ::-webkit-slider-thumb {
      z-index: 2;
      position: relative;
      top: 2px;
      margin-top: -7px;
      }

    • @АлександрБорюшин
      @АлександрБорюшин 4 ปีที่แล้ว +1

      2. (читать по пунктам 1.2.3.) Если вам нужна стилизация ползунков и полоски как в видео (Mac Chrome 38) то дописываете еще и такие стили:
      input[type=range]{
      -webkit-appearance: none;
      }
      input[type=range]::-webkit-slider-runnable-track {
      width: 300px;
      height: 5px;
      background: #ddd;
      border: none;
      border-radius: 3px;
      }
      input[type=range]::-webkit-slider-thumb {
      -webkit-appearance: none;
      border: 1.5px solid #C1C1C1;
      height: 16px;
      width: 16px;
      border-radius: 50%;
      background: #EDEDED;
      }
      input[type=range]:focus {
      outline: none;
      }
      input[type=range]::-webkit-slider-runnable-track {
      width: 100%;
      height: 5px;
      box-shadow: 1px 1px 1px #C6C6C6, 0px 0px 1px #787878;
      border-radius: 2px;
      border: 0.2px solid #787878;
      }

    • @АлександрБорюшин
      @АлександрБорюшин 4 ปีที่แล้ว +4

      3. (читать по пунктам 1.2.3.) И того. Чтобы вы не запутались (чтоб в Windows было как в этом видео) , то полностью в файле v-catalog.vue все стили выглядят вот так:
      .v-catalog {
      &__list {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      align-items: center;
      }
      &__link_to_cart {
      position: fixed;
      top: 10px;
      right: 10px;
      padding: $padding*2;
      border: solid 1px #aeaeae ;
      background: #ffffff;
      }
      }
      .range-slider input[type=range] {
      position: absolute;
      left: 65%;
      top: 180px;
      }
      ::-webkit-slider-thumb {
      z-index: 2;
      position: relative;
      top: 2px;
      margin-top: -7px;
      }
      input[type=range]{
      -webkit-appearance: none;
      }
      input[type=range]::-webkit-slider-runnable-track {
      width: 300px;
      height: 5px;
      background: #ddd;
      border: none;
      border-radius: 3px;
      }
      input[type=range]::-webkit-slider-thumb {
      -webkit-appearance: none;
      border: 1.5px solid #C1C1C1;
      height: 16px;
      width: 16px;
      border-radius: 50%;
      background: #EDEDED;
      }
      input[type=range]:focus {
      outline: none;
      }
      input[type=range]::-webkit-slider-runnable-track {
      width: 100%;
      height: 5px;
      box-shadow: 1px 1px 1px #C6C6C6, 0px 0px 1px #787878;
      border-radius: 2px;
      border: 0.2px solid #787878;
      }

    • @Skif769
      @Skif769 3 ปีที่แล้ว +1

      @@АлександрБорюшин Красава, то что нужно!

    • @НиколайКалинин-о4з
      @НиколайКалинин-о4з ปีที่แล้ว

      @@АлександрБорюшин Спасиб бро!

  • @Skif769
    @Skif769 3 ปีที่แล้ว +1

    Залейте исходники в git пожалуйста

  • @AlexanderGrinvald
    @AlexanderGrinvald 4 ปีที่แล้ว

    Отличный урок, все работает, только у меня список в селекте почему-то все время открыт, нашел причину:

    • @АлександрБорюшин
      @АлександрБорюшин 4 ปีที่แล้ว

      Это последствия предыдущего урока, где про бургер-меню было (как оно может быть устроено). Чтобы работал селект как и раньше, до того урока, нужно перелопатить файл v-catalog.vue . 1. Удалить из тега :isExpended="IS_DESKTOP" 2. из computed: {} удалить 'IS_MOBILE' , 'IS_DESKTOP' (все остальное в остальных файлах можно и оставить пока, оно не особо мешает работе приложения)

    • @fessan8918
      @fessan8918 4 ปีที่แล้ว

      @@АлександрБорюшин Достаточно :isExpended="IS_DESKTOP" удалить. КОмпьютед пусть висит. Учебное же приложение

    • @АлександрБорюшин
      @АлександрБорюшин 4 ปีที่แล้ว

      @@fessan8918 как вам угодно)