Задать вопрос
  • Как записать .mp3 в JSON?

    Aetae
    @Aetae
    Тлен
    Во-первых: не надо так делать.
    Во-вторых: кодируйте в base64(или аналоги), json - текстовый формат и raw данные туда пихать нельзя.
    Ответ написан
    3 комментария
  • В чем разница между type и enum?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Тем что Weekday2s.mon === 0. Если нужны в enum именно строки - то именно строки и следует задавать: enum Weekdays { mon = "mon", ...}
    В остальном, этого:
    Ну кроме того что enum скомпилируется в JS - объект, а type будет доступен только во времени компиляции.

    более чем достаточно. Вместо того чтобы работать со строками(каждый раз новыми), ты работаешь объектом.
    Ответ написан
    Комментировать
  • Правильный способ обработки данных в nuxt?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Совет RokeAlvo полезен, но в браузере также имеется ограничение на количество одновременных запросов, так что 14 - это много. Подумайте как эти запросы объединить. Не думаю, что все они идут в совершенно разные места за совершенно разными данными.
    Придётся отойти от прямых запросов по url и написать агрегатор\кэшировщик через который и обращаться за данными, но это неизбежность.
    Ответ написан
    Комментировать
  • Как передать значение из одного vue в другой?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если это просто рандомные компоненты - то метод можно получить через ref и передать в другой компонент через props. Только "передавать методы" - не по идеологии Vue.
    Если надо из одного компонента вызвать действие другого - первый должен вызывать событие($emit) а вышестоящий компонент оное поймать(@event) и выполнить нужное действие.
    Однако если есть элемент-контейнер, в котором сложная и\или рекурсивная вложенность и который объединяет функционал детей - такой компонент может прокидывать(provide) общий для всех детей объект, которые будут его у себя получать(inject) и пользоваться совместно.
    Ответ написан
    Комментировать
  • Как создать многостраничное приложение из одностраничного на vue.js?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если используете vue-cli: pages. Отдельные entry-point на отдельные страницы при общей кодовой базе.
    Ответ написан
    Комментировать
  • Как убрать null из JSON?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Проверяй что добавляешь перед push, очевидно.
    Ответ написан
  • "TypeError: Cannot read property '0' of undefined", что делать?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Не пытаться прочитать свойство '0' у undefined значения, очевидно. В ошибке всё написано.
    Смотрите где вы читаете свойство с ключом '0'. Нашли?
    Теперь смотрите у какого объекта вы пытаетесь прочесть это свойство. Нашли?
    Вот этот объект - отсутствует(undefined). А уж разобраться почему он отсутствует - ваша задача.

    spoiler
    response.items[0]
    items отсутствует в response
    А отсутствует он там потому что json() вы получаете почему-то уже после того, как пытаетесь получить items из сырого необработанного Response.
    Ответ написан
    Комментировать
  • Как вызывать функцию JS имя которой ввиде строки при помощи CALL() или APPLY()?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    let func = eval(userfunc);
    func.call(arg);

    а лучше:
    let func = new Function('return ' + userfunc)();
    func.call(arg);

    а ещё лучше никогда так не делать.
    Нет ни одной прикладной задачи, где это могло бы потребоваться.
    Если нужно вызывать функции по имени - просто кладите их в объект:
    let funcs = {
      func1(){console.log('Функция вызвана!!!');};
    };
    funcs[userfunc].call(arg);
    Ответ написан
    Комментировать
  • Как сделать одновременно две сборки VUE сайта?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Ну например устанавливать эту переменную с помощью webpack.DefinePlugin во время сборки.
    Но в целом - нахрена вам две одинаковых сборки отличающихся одной переменной? Вынесите эту настройку в кофиг приложения и просто проставляйте нужную на нужной странице.
    Ответ написан
  • Как удалить блок при определенном размере окна браузера?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    === точное сравнение с учётом типа. clientWidth - число, '769' - строка, число никогда не равно строке. Уберите кавычки.
    Также верным условие будет только если clientWidth точно будет равно числу с правой стороны. Вы уверены, что это именно то, что вам нужно? Возможно стоит использовать >= или <=?

    Ну и использовать javascript для таких задач не принято в своременном вэбе. Для этого есть css media queries.
    Ответ написан
    1 комментарий
  • Как подменить скрипт без использования расширений?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Объект chrome доступен только из расширений. Для клиентского js подмена ресурсов возможна только через манипуляции с кэшем в service-worker.
    Ответ написан
  • Как отрефакторить функцию для сортировки массива объектов?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Лучше всего заюзать функцию sortBy из lodash, которая делает именно это, и не парить мозг. Иначе тебе придётся написать аналог функции lodash get, а там есть свои подводные камни.
    Но если примитивно:
    function get(value, str) {
      for(const key of str.split('.')) {
        if(value && key in value) value = value[key];
        else return void 0;
      }
      return value;
    }
    arr.slice().sort((a,b) => get(b,proper) - get(a,proper));
    Ответ написан
    Комментировать
  • Почему await не работает?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Из вопроса не слишеом понятно, но если я правильно понял вопрос: mount - не асинхроный(как и все vue-хуки), компоненты не ждут друг друга и рисуются когда того требует логика отображаения.
    Если один запрос у вас зависит от результата другого - сделайте отдельный сервис запросов, который будет реализовывать всю нужную логику, а не запускайте запросы напрямую через axios.
    Если один компонент у вас зависит от работы другого(такого лучше не делать на самом деле) - монтируйте его только тогда, когда от этого другого поступит событие о завершении работы(посланное вами же через $emit).
    Ответ написан
  • Динамический импорт улучшит загрузку VUE сайта или нет?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Прибьёт. Использовать следует разумно. В основном когда такие компоненты тянут приличные (по размеру относительно бандла) куски кода с собой, а вызываются редко.
    Ответ написан
    Комментировать
  • Как сделать внутреннюю тень поверх дочернего элемента?

    Aetae
    @Aetae
    Тлен
    Никак. Тень - это тень, а дети - поверх родителей.
    Можно сделать полноразмерный псевдоэлемент ::after с тенью и pointer-events: none;.
    Ответ написан
  • Как отсортировать список в js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Хз что такое BAS, но вот тебе код на классическом js, который должен работать везде:
    var newArray = [];
    for(var i = 0; i < list.length; i++) { // list - твой список ссылок
      var link = list[i].href; // если в списке уже строки, а не элементы, то убрать .href
      if(link.indexOf('#') === -1) { // если нет # в строке
        newArray.push('определенный текст' + link.slice(5)); // берём определенный текст и добавляем к нему строку начиная с 5 символа
      }
    }
    Ответ написан
  • Как изменить значение в JSON php?

    Aetae
    @Aetae
    Тлен
    json_decode($json, true), изменяем полученный обычный php-массив, json_encode обратно. Какие проблемы?
    Ещё можно по-храдкору str_replace, но лучше не надо.
    Ответ написан
    8 комментариев
  • Как сделать плавный скролл к якорям на чистом js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    С помощью requestAnimationFrame.
    Например(из фреймворка quasar):
    function getScrollPosition (scrollTarget) {
      if (scrollTarget === window) {
        return window.pageYOffset || window.scrollY || document.body.scrollTop || 0
      }
      return scrollTarget.scrollTop
    }
    
    function setScroll (scrollTarget, offset) {
      if (scrollTarget === window) {
        window.scrollTo(0, offset)
        return
      }
      scrollTarget.scrollTop = offset
    }
    
    function animScrollTo (el, to, duration) {
      const pos = getScrollPosition(el)
    
      if (duration <= 0) {
        if (pos !== to) {
          setScroll(el, to)
        }
        return
      }
    
      requestAnimationFrame(() => {
        const newPos = pos + (to - pos) / Math.max(16, duration) * 16
        setScroll(el, newPos)
        if (newPos !== to) {
          animScrollTo(el, to, duration - 16)
        }
      })
    }

    animScrollTo(<элемент-контейнер>, <позиция>, <время на анимацию>)

    Позицию якоря вычисляйте сами.)

    Ну либо можно поискать готовый пакет в npm, который с гарантией там есть.
    Ответ написан
    Комментировать
  • Как получить локальные картинки за пределами проекта?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Эти картинки отсутствуют на сервере, потому что никто их туда не кладёт. Сервер(webpack devserver) работает не от локальной папки, а от структурированного как описано в конфиге результата сборки. Сделайте build и посмотрите в папку dist: именно так и выглядит структура файлов на сервере.

    Вы можете положить эту папку с картинками туда использовав copy-webpack-plugin. Если на сервер эта папка будет класться вручную и в прод. dist она вам не нужна - можете подключать этот плагин только для develpment.
    Альтернативно вы можете настроить devserver (используя before/after), чтоб он просто отдавал файлы из этой папки по соответствующему запросу(читая их содержимое вручную средствам node fs).
    Главное не забыть потом положить эту папку на сервер руками.
    Ответ написан
    Комментировать
  • Как остаться на той же странице после авторизации?

    Aetae
    @Aetae
    Тлен
    Должно работать, хз почему не отдупляется.

    Попробуй закостылять задержку:
    вместо window.location.href = '/personal/'; поставь:
    setTimeout(function(){ window.location.reload();}, 1000)
    Если даже секундная задержка ни на что не повлияет, значит по адресу /personal/ лежит какой-то говнокод, влияющий на авторизацию.

    Хотя ещё вариант - какой-то говнокэш. Чтоб проверить это замени: window.location.href = '/personal/'; на: window.location.search = Math.random();
    Ответ написан
    Комментировать