• Как работает этот код?

    @Kutuzov_ska
    Внимание! Так делать нельзя и небезопасно, но для пояснения можно.
    В computed - нельзя модифицировать данные из data.

    Вот вариант с полным присвоением
    5f73683e8bc51733381337.png

    Ваша ошибка вероятно кроется в понимании реактивности.
    Если почитаете документацию, там если не ошибаюсь будет пункт о том, как она работает.
    https://ru.vuejs.org/v2/guide/reactivity.html
    Например в объектах надо вызывать this.$set... у массивов отслеживаются push, pop... и т.д.

    То есть изменение
    a=1;
    a=2;

    Vue видит правильно. А вот:
    a = {};
    a= {lol:"kek"}

    Уже могут быть проблемы.

    При каждом нажатии на чекбокс, вью пробегает по массиву todos.
    В момент самого первого нажатия он понимает что для массива todos, например объекту 1 вы добавили свойство calc, но значение он не зафикисровал.

    Когда вы кликаете на 2 чекбокс, он опять проходить ВЕСЬ массив, и Vue повторно проверяет calc у 1 и уже тогда понимает что значение у него изменилось (calc то уже существует), а у второго он опять его только создает.
    Ответ написан
    2 комментария
  • Как рассчитывается ширина элементов?

    Psixodelik
    @Psixodelik
    Преподаватель на Hexlet
    Надо идти постепенно.

    Добавив flex в класс .payment ты сделал блок .payment__col flex-элементом. Этот элемент имеет ширину равной ширине своего контента. Общая ширина этих двух фраз внутри равна 192px.

    После этого ты говоришь блокам внутри .payment__col занимать 50% ширины своего родителя (который, напомню, имеет ширину в 192px). Собственно теперь этим блокам ты отвёл по 96px. А так как фразе SUBTOTAL 123 просто некуда влезть она выходит за границы своего блока и наложилась на другую фразу.
    Ответ написан
    Комментировать
  • Как выбрать определенные элементы вверх по дереву?

    fallus
    @fallus
    Ну, если вверх по дереву, относительно кликнутой ссылки, не выходя за рамки .nav, то так:

    $('.link').on('click', function(e){
    	e.preventDefault();
    	$(this).parentsUntil('.nav', 'li').find('a').css('color', 'red')
    })
    Ответ написан
    Комментировать
  • Как выбрать определенные элементы вверх по дереву?

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('.link').parents('li').children('a').css('color', '#f00');
    Ответ написан
    Комментировать
  • Как подключить внутри каждой записи свой скрипт?

    kotboris
    @kotboris
    Руководитель студии, дизайнер и разработчик сайтов
    Вариант 1
    Advanced Custom Fields как раз отлично поможет в данной ситуации. Вы можете создать кастомное поле которое будет выводиться в какой либо части контента поста. В каждом посте в админке будет некий метабокс с полем ввода. Пишете туда код, который вам нужно вывести во фронте и вуаля.

    Вариант 2
    Если вам удобнее все настраивать не в админке, а писать код в файлах. То можно через functions.php вашей темы прописать подключение скриптов для конкретных постов, ниже пример:
    add_action( 'wp', function () {
    	if ( is_single( 12 ) ) { //проверка идентификатора поста
    		// какой-либо код
    	}
    } );


    Подключить скрипт можно так, если тема родительская:
    wp_enqueue_script('newscript', get_template_directory_uri() . '/js/custom_script.js');

    и так если дочерняя:
    wp_enqueue_script('newscript', get_stylesheet_directory_uri() . '/js/custom_script.js');
    Ответ написан
    Комментировать
  • Как подключить внутри каждой записи свой скрипт?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Где мне хранить эти файлы и где прописывать путь?

    Хранить файлы вы можете как в БД, так и в uploads, а путь хранить в ACF.

    Как вариант - сериализуйте json и храните в БД при помощи ACF. А скриптом доставайте json из БД
    Ответ написан
    Комментировать
  • Как вернуть свойство объекта в родительский компонент?

    0xD34F
    @0xD34F Куратор тега Vue.js
    v-model или sync
    Ответ написан
    Комментировать
  • Как переместить меню в другой html-элемент в vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Ничего перемещать не надо. Сделайте компонент, и пусть открытым меню может быть только в одном экземпляре.
    Ответ написан
    Комментировать
  • Как фильтровать элементы по двум и более параметрам?

    @AleksRap
    Создайте класс с полями - значениями фильтров и рендерите результат с учетом всех этих фильтров. Так же в этом классе добавьте методы срабатывающие при переключении фильтров и меняющие значения фильтров в соответствующих полях класса

    class FigureFilter {
      size = null;
      color = null;
      shape = null;
      
      constructor(selector) {
        this.allFiguresNode = document.querySelectorAll(selector);
      }
    
      /**
       * Эти свойства юзать при нажатии на кнопки
       */
      changeSize(size) {
        this.size = size;
        this.#render();
      }
    
      changeColor(color) {
        this.color = color;
        this.#render();
      }
    
      changeShape(shape) {
        this.shape = shape;
        this.#render();
      }
    
      /**
       * Эти не трогать
       */
      #render() {
        [...this.allFiguresNode].forEach(figure => {
    
          this.#checkFigure(figure, 'size');
          this.#checkFigure(figure, 'color');
          this.#checkFigure(figure, 'shape');
        })
      }
      
      #checkFigure(figure, area) {
        figure.dataset[area] === this[area]
          ? this.#showFigure(figure)
          : this.#hideFigure(figure);
      }
      
      #showFigure(el) {
        el.setAttribute('hidden', true);
      }
      
      #hideFigure(el) {
        el.removeAttribute('hidden');
      }
    }


    Набросал на скорую руку пример такого класса
    Ответ написан
    Комментировать
  • Почему input теряет фокус?

    profesor08
    @profesor08 Куратор тега JavaScript
    Потому что у тебя перерисовывается весь компонент, так как меняется количество, тип или порядок элементов. Помни это, живи с этим, борись с этим, и ненавидь это.

    Пробуй скрывать свои дополнительные элементы через v-show, или стилями.
    Ответ написан
    Комментировать
  • Почему input теряет фокус?

    Seasle
    @Seasle Куратор тега JavaScript
    В данном случае используйте v-show (Почему?).
    Ответ написан
    2 комментария
  • Как добавить атрибут value только первому тегу option?

    0xD34F
    @0xD34F Куратор тега Vue.js
    <option
      v-for="(n, i) in options"
      v-text="n"
      v-bind="!i && { disabled: true, value: '' }"
    ></option>

    Вот только не могу понять, в чём смысл отключения option'а, содержимое которого вполне осмысленное? - если пользователь выбрал что-то другое, а потом решил вернуться к первому варианту, то сделать это не удастся. Если вы хотите создать что-то вроде плейсхолдера, то создавайте отключенный option отдельно:

    <option disabled value="">выбирай!</option>
    <option v-for="n in options">{{ n }}</option>
    Ответ написан
    Комментировать
  • @media min-width и max-width вместе на одном брейкпоинте?

    Seanyr
    @Seanyr
    Такое используется, когда это целесообразно.
    С той же целью еще можно min и max использовать в одном запросе, например:
    @media (min-width: 768px) and (max-width: 1023px) {...}

    Но пихать все перезаписываемые свойства под медиа-запросы я считаю не очень хорошей практикой по нескольким причинам:
    - это усложняет структуру кода, и ухудшает читаемость
    - хоть в инспекторе и отображается меньше свойств , но сам css файл растет, а на скорость загрузки влияет именно он
    - так же свойства по-умолчанию прописываются для максимальной совместимости, хотя это скорее всего уже неактуально
    Это сугубо моё мнение, интересно было бы послушать другие.
    п.с. А вот с использованием дробных значений в брэйкпойнтах я на сталкивался
    Ответ написан
    1 комментарий
  • Как собрать данные формы?

    В data создай массив объектов, каждый из которых будет иметь label, type, value.
    И выводи их циклом v-for.
    v-model цепляй на value.
    А по type можешь разные поля выводить. Например v-if="item.type === 'text'", тогда выводишь текстовый input.
    v-if="item.type === 'select'", тогда select. И там же в объекте можешь хранить options.
    Ответ написан
    Комментировать
  • Как собрать данные формы?

    Комментировать
  • Как в vue обратиться к определенному dom-элементу?

    0xD34F
    @0xD34F Куратор тега Vue.js
    .active {
      background: red;
    }

    data: () => ({
      val: -Infinity,
      ...
    }),
    methods: {
      onClick() {
        this.val = Math.min(...this.arr.filter(n => n > this.val));
      },
      ...
    },

    <div v-for="n in arr" :class="{ active: n <= val }">{{ n }}</div>
    <button @click="onClick">click me</button>
    Ответ написан
    Комментировать
  • Как отрисовать элементы из двумерного массива?

    Для внешнего цикла можно использовать «пусто» элемент template,
    внутренний цикл генерит уже сами div'ы:


    fiddle
    Ответ написан
    Комментировать
  • Как отрисовать элементы из двумерного массива?

    0xD34F
    @0xD34F Куратор тега Vue.js
    computed: {
      flatArr() {
        return this.arr
          .flatMap((n, i) => n.map((m, j) => m && ({ gridRowStart: i + 1, gridColumnStart: j + 1 })))
          .filter(Boolean);
      },
    },

    <div class="grid">
      <div v-for="n in flatArr" class="cell" :style="n"></div>
    </div>
    Ответ написан
    Комментировать
  • Как создать снимок с помощью html2canvas?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Почему в примере не получается создать снимок

    Потому что параметры windowWidth и windowHeight в данном случае задавать не нужно. Уберите их и все заработает.
    Ответ написан
    Комментировать
  • Как вывести список отмеченных чекбоксов в vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    computed: {
      done() {
        return this.todos.filter(n => n.done);
      },
    },

    <ol v-if="done.length">
      <li v-for="n in done" v-text="n.text"></li>
    </ol>
    Ответ написан
    Комментировать