Задать вопрос
  • Деплой Vue.js на GitHub выдает ошибку?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Неплохо бы, чтоб в следующих своих вопросах ты прикладывал собственно КОД и тест ошибки.
    Я смог выковырять причину из собранного бандла, но тебе просто повезло, куда чаще мне(и 99% людей) так делать лень.

    Теперь, собственно, проблема:
    у тебя в коде есть несколько мест где используется подобная обработка событий:
    @side-emit="(side, id) => { 
        this.players[id].side = side; 
        ...
    }"

    Причина ошибки в том, что ты тут явно используешь this, а внутри шаблона он не нужен, т.к. либо раскрывается неявно автоматически, либо, в случае со <script setup>, не используется вовсе. Следует запомнить: никакого this в шаблонах.
    Вот так будет работать:
    @side-emit="(side, id) => { 
        players[id].side = side; 
        ...
    }"

    Почему работает в режиме разработки? Потому что во время разработки используется упрощённый режим сборки, который совершенно случайно делает доступным правильный this в данном конкретном случае. Просто так совпало.

    Ну и касательно кода: в данном случае использовано аж два антипаттерна, которые лучше вообще не употреблять:
    1. События компонента должны эмитить ровно одно значение. Да, vue позволяет эмитить и принимать сколько угодно значений, однако чаще чем следовало бы это приводит к плохому коду. Желательно придерживаться правила: одно событие - один payload, как в обычных событиях js.
    2. Не следует декларировать функции внутри шаблона. Шаблон сам по себе должен содержать минимальное количество кода. Да, vue позволяет использовать любой js в шаблоне, однако чаще чем следовало бы это приводит к плохому коду. В шаблонах следует использовать маленькие кусочки кода, условно: @side-emit="someValue = $event ? 1 : 2", а что-то сложнее просто выносить в метод компонента\composition функцию: @side-emit="onSlideEmit".
    Ответ написан
    1 комментарий
  • Почему img height отличается от родительского height? И как это решить?

    nomenEst
    @nomenEst
    Сила гугла
    img {
      display: block;
      height: 100%
      object-fit: cover;
    }

    object-fit опционально
    Ответ написан
    Комментировать
  • Почему img height отличается от родительского height? И как это решить?

    @jasper-blondin
    Потому что тег IMG -- инлайновый и на него влияют стили типографики.

    Укажите для тега IMG блочные стили:
    img {
        display: block;
    }
    Ответ написан
    1 комментарий
  • Как создать счетчик кликов для каждого элемента?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно использовать делегирование событий (гуглите).

    Ловить клики выше в DOM-дереве на каком-то общем родителе.
    Можно даже сами элементы использовать в качестве ключей в Map для подсчёта кликов.
    Ответ написан
    Комментировать
  • Как создать счетчик кликов для каждого элемента?

    @chelnokov_a
    Да тут же все примитивно. У тебя есть два пути. Либо слушать события на каждом элементе и внутри функции заводить счетчик. Или использовать делегирование что производительней. При делегировании задай для каждого элемента уникальные дата-атрибут или класс. храни данные счетчиков в массиве, в качестве ключа используй это уникальное значение. Для отображения доставай из массива. Профит
    Ответ написан
    Комментировать
  • Как воспроизвести аудио плейлист без наложения друг на друга?

    @MamaLuyba
    дык так же и ставь: либо пробежался по массиву и поставил на паузу все, кроме выбранного, либо через селектор выбери те, которые проигрываются и их на паузу.
    Ответ написан
    Комментировать